; LLVM IR from robotics-upo/Heuristic_path_planners :: include/voro++-0.4.6/src (container_prd)

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

%"class.voro::voro_base" = type { i32, i32, i32, i32, i32, double, double, double, double, double, double, ptr }
%"class.voro::container_periodic_base" = type { %"class.voro::unitcell", %"class.voro::voro_base", i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%"class.voro::unitcell" = type { double, double, double, double, double, double, %"class.voro::voronoicell", double, double }
%"class.voro::voronoicell" = type { %"class.voro::voronoicell_base" }
%"class.voro::voronoicell_base" = type { ptr, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, double, double, double, double }

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN4voro9voro_base8step_intEd(ptr noundef nonnull align 8 dereferenceable(80), double noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80), i32 noundef, i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384), i32 noundef, i32 noundef, i32 noundef, double noundef, double noundef, double noundef) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4voro23container_periodic_base21create_vertical_imageEiii(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) #3 align 2 {
  %5 = alloca ptr, align 8
  %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 i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca i8, align 1
  %32 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store i32 %2, ptr %7, align 4, !tbaa !9
  store i32 %3, ptr %8, align 4, !tbaa !9
  %33 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %34 = load i32, ptr %6, align 4, !tbaa !9
  %35 = getelementptr inbounds i8, ptr %33, i64 224
  %36 = getelementptr inbounds %"class.voro::voro_base", ptr %35, i32 0, i32 0
  %37 = load i32, ptr %36, align 8, !tbaa !11
  %38 = load i32, ptr %7, align 4, !tbaa !9
  %39 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 6
  %40 = load i32, ptr %39, align 8, !tbaa !14
  %41 = load i32, ptr %8, align 4, !tbaa !9
  %42 = mul nsw i32 %40, %41
  %43 = add nsw i32 %38, %42
  %44 = mul nsw i32 %37, %43
  %45 = add nsw i32 %34, %44
  store i32 %45, ptr %10, align 4, !tbaa !9
  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 4, ptr %13) #4
  %46 = getelementptr inbounds i8, ptr %33, i64 224
  %47 = load i32, ptr %8, align 4, !tbaa !9
  %48 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 3
  %49 = load i32, ptr %48, align 4, !tbaa !19
  %50 = sub nsw i32 %47, %49
  %51 = getelementptr inbounds i8, ptr %33, i64 224
  %52 = getelementptr inbounds %"class.voro::voro_base", ptr %51, i32 0, i32 2
  %53 = load i32, ptr %52, align 8, !tbaa !20
  %54 = call noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80) %46, i32 noundef %50, i32 noundef %53)
  store i32 %54, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %55 = load i32, ptr %7, align 4, !tbaa !9
  %56 = getelementptr inbounds i8, ptr %33, i64 224
  %57 = load i32, ptr %13, align 4, !tbaa !9
  %58 = sub nsw i32 0, %57
  %59 = sitofp i32 %58 to double
  %60 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 4
  %61 = load double, ptr %60, align 8, !tbaa !21
  %62 = fmul double %59, %61
  %63 = getelementptr inbounds i8, ptr %33, i64 224
  %64 = getelementptr inbounds %"class.voro::voro_base", ptr %63, i32 0, i32 9
  %65 = load double, ptr %64, align 8, !tbaa !22
  %66 = fmul double %62, %65
  %67 = call noundef i32 @_ZN4voro9voro_base8step_intEd(ptr noundef nonnull align 8 dereferenceable(80) %56, double noundef %66)
  %68 = add nsw i32 %55, %67
  store i32 %68, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %69 = getelementptr inbounds i8, ptr %33, i64 224
  %70 = load i32, ptr %14, align 4, !tbaa !9
  %71 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 2
  %72 = load i32, ptr %71, align 8, !tbaa !23
  %73 = sub nsw i32 %70, %72
  %74 = getelementptr inbounds i8, ptr %33, i64 224
  %75 = getelementptr inbounds %"class.voro::voro_base", ptr %74, i32 0, i32 1
  %76 = load i32, ptr %75, align 4, !tbaa !24
  %77 = call noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80) %69, i32 noundef %73, i32 noundef %76)
  store i32 %77, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %78 = load i32, ptr %6, align 4, !tbaa !9
  %79 = getelementptr inbounds i8, ptr %33, i64 224
  %80 = load i32, ptr %13, align 4, !tbaa !9
  %81 = sub nsw i32 0, %80
  %82 = sitofp i32 %81 to double
  %83 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 3
  %84 = load double, ptr %83, align 8, !tbaa !25
  %85 = load i32, ptr %15, align 4, !tbaa !9
  %86 = sitofp i32 %85 to double
  %87 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 1
  %88 = load double, ptr %87, align 8, !tbaa !26
  %89 = fmul double %86, %88
  %90 = fneg double %89
  %91 = call double @llvm.fmuladd.f64(double %82, double %84, double %90)
  %92 = getelementptr inbounds i8, ptr %33, i64 224
  %93 = getelementptr inbounds %"class.voro::voro_base", ptr %92, i32 0, i32 8
  %94 = load double, ptr %93, align 8, !tbaa !27
  %95 = fmul double %91, %94
  %96 = call noundef i32 @_ZN4voro9voro_base8step_intEd(ptr noundef nonnull align 8 dereferenceable(80) %79, double noundef %95)
  %97 = add nsw i32 %78, %96
  store i32 %97, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %98 = getelementptr inbounds i8, ptr %33, i64 224
  %99 = load i32, ptr %16, align 4, !tbaa !9
  %100 = getelementptr inbounds i8, ptr %33, i64 224
  %101 = getelementptr inbounds %"class.voro::voro_base", ptr %100, i32 0, i32 0
  %102 = load i32, ptr %101, align 8, !tbaa !11
  %103 = call noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80) %98, i32 noundef %99, i32 noundef %102)
  store i32 %103, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %104 = load i32, ptr %16, align 4, !tbaa !9
  %105 = load i32, ptr %17, align 4, !tbaa !9
  %106 = getelementptr inbounds i8, ptr %33, i64 224
  %107 = getelementptr inbounds %"class.voro::voro_base", ptr %106, i32 0, i32 0
  %108 = load i32, ptr %107, align 8, !tbaa !11
  %109 = mul nsw i32 %105, %108
  %110 = sub nsw i32 %104, %109
  store i32 %110, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %111 = load i32, ptr %14, align 4, !tbaa !9
  %112 = load i32, ptr %15, align 4, !tbaa !9
  %113 = getelementptr inbounds i8, ptr %33, i64 224
  %114 = getelementptr inbounds %"class.voro::voro_base", ptr %113, i32 0, i32 1
  %115 = load i32, ptr %114, align 4, !tbaa !24
  %116 = mul nsw i32 %112, %115
  %117 = sub nsw i32 %111, %116
  store i32 %117, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %118 = load i32, ptr %18, align 4, !tbaa !9
  %119 = getelementptr inbounds i8, ptr %33, i64 224
  %120 = getelementptr inbounds %"class.voro::voro_base", ptr %119, i32 0, i32 0
  %121 = load i32, ptr %120, align 8, !tbaa !11
  %122 = load i32, ptr %19, align 4, !tbaa !9
  %123 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 6
  %124 = load i32, ptr %123, align 8, !tbaa !14
  %125 = load i32, ptr %8, align 4, !tbaa !9
  %126 = load i32, ptr %13, align 4, !tbaa !9
  %127 = getelementptr inbounds i8, ptr %33, i64 224
  %128 = getelementptr inbounds %"class.voro::voro_base", ptr %127, i32 0, i32 2
  %129 = load i32, ptr %128, align 8, !tbaa !20
  %130 = mul nsw i32 %126, %129
  %131 = sub nsw i32 %125, %130
  %132 = mul nsw i32 %124, %131
  %133 = add nsw i32 %122, %132
  %134 = mul nsw i32 %121, %133
  %135 = add nsw i32 %118, %134
  store i32 %135, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  %136 = load i32, ptr %13, align 4, !tbaa !9
  %137 = sitofp i32 %136 to double
  %138 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 4
  %139 = load double, ptr %138, align 8, !tbaa !21
  %140 = load i32, ptr %15, align 4, !tbaa !9
  %141 = sitofp i32 %140 to double
  %142 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 2
  %143 = load double, ptr %142, align 8, !tbaa !28
  %144 = fmul double %141, %143
  %145 = call double @llvm.fmuladd.f64(double %137, double %139, double %144)
  store double %145, ptr %22, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %146 = load i32, ptr %7, align 4, !tbaa !9
  %147 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 2
  %148 = load i32, ptr %147, align 8, !tbaa !23
  %149 = sub nsw i32 %146, %148
  %150 = sitofp i32 %149 to double
  %151 = getelementptr inbounds i8, ptr %33, i64 224
  %152 = getelementptr inbounds %"class.voro::voro_base", ptr %151, i32 0, i32 6
  %153 = load double, ptr %152, align 8, !tbaa !30
  %154 = load i32, ptr %13, align 4, !tbaa !9
  %155 = sitofp i32 %154 to double
  %156 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 4
  %157 = load double, ptr %156, align 8, !tbaa !21
  %158 = fmul double %155, %157
  %159 = fneg double %158
  %160 = call double @llvm.fmuladd.f64(double %150, double %153, double %159)
  %161 = load i32, ptr %15, align 4, !tbaa !9
  %162 = sitofp i32 %161 to double
  %163 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 2
  %164 = load double, ptr %163, align 8, !tbaa !28
  %165 = fneg double %162
  %166 = call double @llvm.fmuladd.f64(double %165, double %164, double %160)
  store double %166, ptr %23, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %167 = load i32, ptr %13, align 4, !tbaa !9
  %168 = sitofp i32 %167 to double
  %169 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 3
  %170 = load double, ptr %169, align 8, !tbaa !25
  %171 = load i32, ptr %15, align 4, !tbaa !9
  %172 = sitofp i32 %171 to double
  %173 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 1
  %174 = load double, ptr %173, align 8, !tbaa !26
  %175 = fmul double %172, %174
  %176 = call double @llvm.fmuladd.f64(double %168, double %170, double %175)
  %177 = load i32, ptr %17, align 4, !tbaa !9
  %178 = sitofp i32 %177 to double
  %179 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %180 = load double, ptr %179, align 8, !tbaa !31
  %181 = call double @llvm.fmuladd.f64(double %178, double %180, double %176)
  store double %181, ptr %24, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %182 = load i32, ptr %6, align 4, !tbaa !9
  %183 = sitofp i32 %182 to double
  %184 = getelementptr inbounds i8, ptr %33, i64 224
  %185 = getelementptr inbounds %"class.voro::voro_base", ptr %184, i32 0, i32 5
  %186 = load double, ptr %185, align 8, !tbaa !32
  %187 = load i32, ptr %13, align 4, !tbaa !9
  %188 = sitofp i32 %187 to double
  %189 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 3
  %190 = load double, ptr %189, align 8, !tbaa !25
  %191 = fmul double %188, %190
  %192 = fneg double %191
  %193 = call double @llvm.fmuladd.f64(double %183, double %186, double %192)
  %194 = load i32, ptr %15, align 4, !tbaa !9
  %195 = sitofp i32 %194 to double
  %196 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 1
  %197 = load double, ptr %196, align 8, !tbaa !26
  %198 = fneg double %195
  %199 = call double @llvm.fmuladd.f64(double %198, double %197, double %193)
  %200 = load i32, ptr %17, align 4, !tbaa !9
  %201 = sitofp i32 %200 to double
  %202 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %203 = load double, ptr %202, align 8, !tbaa !31
  %204 = fneg double %201
  %205 = call double @llvm.fmuladd.f64(double %204, double %203, double %199)
  store double %205, ptr %25, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %206 = load i32, ptr %6, align 4, !tbaa !9
  %207 = icmp eq i32 %206, 0
  br i1 %207, label %208, label %219

208:                                              ; preds = %4
  %209 = load i32, ptr %10, align 4, !tbaa !9
  %210 = getelementptr inbounds i8, ptr %33, i64 224
  %211 = getelementptr inbounds %"class.voro::voro_base", ptr %210, i32 0, i32 0
  %212 = load i32, ptr %211, align 8, !tbaa !11
  %213 = add nsw i32 %209, %212
  %214 = sub nsw i32 %213, 1
  store i32 %214, ptr %11, align 4, !tbaa !9
  %215 = load double, ptr %24, align 8, !tbaa !29
  %216 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %217 = load double, ptr %216, align 8, !tbaa !31
  %218 = fadd double %215, %217
  store double %218, ptr %27, align 8, !tbaa !29
  br label %223

219:                                              ; preds = %4
  %220 = load i32, ptr %10, align 4, !tbaa !9
  %221 = sub nsw i32 %220, 1
  store i32 %221, ptr %11, align 4, !tbaa !9
  %222 = load double, ptr %24, align 8, !tbaa !29
  store double %222, ptr %27, align 8, !tbaa !29
  br label %223

223:                                              ; preds = %219, %208
  %224 = load i32, ptr %6, align 4, !tbaa !9
  %225 = getelementptr inbounds i8, ptr %33, i64 224
  %226 = getelementptr inbounds %"class.voro::voro_base", ptr %225, i32 0, i32 0
  %227 = load i32, ptr %226, align 8, !tbaa !11
  %228 = sub nsw i32 %227, 1
  %229 = icmp eq i32 %224, %228
  br i1 %229, label %230, label %241

230:                                              ; preds = %223
  %231 = load i32, ptr %10, align 4, !tbaa !9
  %232 = getelementptr inbounds i8, ptr %33, i64 224
  %233 = getelementptr inbounds %"class.voro::voro_base", ptr %232, i32 0, i32 0
  %234 = load i32, ptr %233, align 8, !tbaa !11
  %235 = sub nsw i32 %231, %234
  %236 = add nsw i32 %235, 1
  store i32 %236, ptr %12, align 4, !tbaa !9
  %237 = load double, ptr %24, align 8, !tbaa !29
  %238 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %239 = load double, ptr %238, align 8, !tbaa !31
  %240 = fsub double %237, %239
  store double %240, ptr %28, align 8, !tbaa !29
  br label %245

241:                                              ; preds = %223
  %242 = load i32, ptr %10, align 4, !tbaa !9
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %12, align 4, !tbaa !9
  %244 = load double, ptr %24, align 8, !tbaa !29
  store double %244, ptr %28, align 8, !tbaa !29
  br label %245

245:                                              ; preds = %241, %230
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #4
  %246 = load i32, ptr %7, align 4, !tbaa !9
  %247 = icmp ne i32 %246, 0
  %248 = zext i1 %247 to i8
  store i8 %248, ptr %31, align 1, !tbaa !33
  %249 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %250 = load ptr, ptr %249, align 8, !tbaa !35
  %251 = load i32, ptr %10, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i8, ptr %250, i64 %252
  %254 = load i8, ptr %253, align 1, !tbaa !36
  %255 = sext i8 %254 to i32
  %256 = and i32 %255, 1
  %257 = icmp eq i32 %256, 0
  br i1 %257, label %258, label %419

258:                                              ; preds = %245
  %259 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %260 = load ptr, ptr %259, align 8, !tbaa !35
  %261 = load i32, ptr %11, align 4, !tbaa !9
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i8, ptr %260, i64 %262
  %264 = load i8, ptr %263, align 1, !tbaa !36
  %265 = sext i8 %264 to i32
  %266 = or i32 %265, 2
  %267 = trunc i32 %266 to i8
  store i8 %267, ptr %263, align 1, !tbaa !36
  %268 = load i8, ptr %31, align 1, !tbaa !33, !range !37, !noundef !38
  %269 = trunc i8 %268 to i1
  br i1 %269, label %270, label %297

270:                                              ; preds = %258
  %271 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %272 = load ptr, ptr %271, align 8, !tbaa !35
  %273 = load i32, ptr %11, align 4, !tbaa !9
  %274 = getelementptr inbounds i8, ptr %33, i64 224
  %275 = getelementptr inbounds %"class.voro::voro_base", ptr %274, i32 0, i32 0
  %276 = load i32, ptr %275, align 8, !tbaa !11
  %277 = sub nsw i32 %273, %276
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds i8, ptr %272, i64 %278
  %280 = load i8, ptr %279, align 1, !tbaa !36
  %281 = sext i8 %280 to i32
  %282 = or i32 %281, 8
  %283 = trunc i32 %282 to i8
  store i8 %283, ptr %279, align 1, !tbaa !36
  %284 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %285 = load ptr, ptr %284, align 8, !tbaa !35
  %286 = load i32, ptr %10, align 4, !tbaa !9
  %287 = getelementptr inbounds i8, ptr %33, i64 224
  %288 = getelementptr inbounds %"class.voro::voro_base", ptr %287, i32 0, i32 0
  %289 = load i32, ptr %288, align 8, !tbaa !11
  %290 = sub nsw i32 %286, %289
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i8, ptr %285, i64 %291
  %293 = load i8, ptr %292, align 1, !tbaa !36
  %294 = sext i8 %293 to i32
  %295 = or i32 %294, 4
  %296 = trunc i32 %295 to i8
  store i8 %296, ptr %292, align 1, !tbaa !36
  br label %297

297:                                              ; preds = %270, %258
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %298

298:                                              ; preds = %415, %297
  %299 = load i32, ptr %9, align 4, !tbaa !9
  %300 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 11
  %301 = load ptr, ptr %300, align 8, !tbaa !39
  %302 = load i32, ptr %20, align 4, !tbaa !9
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds i32, ptr %301, i64 %303
  %305 = load i32, ptr %304, align 4, !tbaa !9
  %306 = icmp slt i32 %299, %305
  br i1 %306, label %307, label %418

307:                                              ; preds = %298
  %308 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %309 = load ptr, ptr %308, align 8, !tbaa !40
  %310 = load i32, ptr %20, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds ptr, ptr %309, i64 %311
  %313 = load ptr, ptr %312, align 8, !tbaa !5
  %314 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %315 = load i32, ptr %314, align 4, !tbaa !41
  %316 = load i32, ptr %9, align 4, !tbaa !9
  %317 = mul nsw i32 %315, %316
  %318 = add nsw i32 %317, 1
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds double, ptr %313, i64 %319
  %321 = load double, ptr %320, align 8, !tbaa !29
  %322 = load double, ptr %23, align 8, !tbaa !29
  %323 = fcmp ogt double %321, %322
  br i1 %323, label %324, label %363

324:                                              ; preds = %307
  %325 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %326 = load ptr, ptr %325, align 8, !tbaa !40
  %327 = load i32, ptr %20, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds ptr, ptr %326, i64 %328
  %330 = load ptr, ptr %329, align 8, !tbaa !5
  %331 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %332 = load i32, ptr %331, align 4, !tbaa !41
  %333 = load i32, ptr %9, align 4, !tbaa !9
  %334 = mul nsw i32 %332, %333
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds double, ptr %330, i64 %335
  %337 = load double, ptr %336, align 8, !tbaa !29
  %338 = load double, ptr %25, align 8, !tbaa !29
  %339 = fcmp ogt double %337, %338
  br i1 %339, label %340, label %351

340:                                              ; preds = %324
  %341 = load i32, ptr %10, align 4, !tbaa !9
  %342 = load i32, ptr %20, align 4, !tbaa !9
  %343 = load i32, ptr %9, align 4, !tbaa !9
  %344 = load double, ptr %24, align 8, !tbaa !29
  %345 = load double, ptr %22, align 8, !tbaa !29
  %346 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %347 = load double, ptr %346, align 8, !tbaa !42
  %348 = load i32, ptr %13, align 4, !tbaa !9
  %349 = sitofp i32 %348 to double
  %350 = fmul double %347, %349
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %341, i32 noundef %342, i32 noundef %343, double noundef %344, double noundef %345, double noundef %350)
  br label %362

351:                                              ; preds = %324
  %352 = load i32, ptr %11, align 4, !tbaa !9
  %353 = load i32, ptr %20, align 4, !tbaa !9
  %354 = load i32, ptr %9, align 4, !tbaa !9
  %355 = load double, ptr %27, align 8, !tbaa !29
  %356 = load double, ptr %22, align 8, !tbaa !29
  %357 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %358 = load double, ptr %357, align 8, !tbaa !42
  %359 = load i32, ptr %13, align 4, !tbaa !9
  %360 = sitofp i32 %359 to double
  %361 = fmul double %358, %360
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %352, i32 noundef %353, i32 noundef %354, double noundef %355, double noundef %356, double noundef %361)
  br label %362

362:                                              ; preds = %351, %340
  br label %414

363:                                              ; preds = %307
  %364 = load i8, ptr %31, align 1, !tbaa !33, !range !37, !noundef !38
  %365 = trunc i8 %364 to i1
  br i1 %365, label %367, label %366

366:                                              ; preds = %363
  br label %415

367:                                              ; preds = %363
  %368 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %369 = load ptr, ptr %368, align 8, !tbaa !40
  %370 = load i32, ptr %20, align 4, !tbaa !9
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds ptr, ptr %369, i64 %371
  %373 = load ptr, ptr %372, align 8, !tbaa !5
  %374 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %375 = load i32, ptr %374, align 4, !tbaa !41
  %376 = load i32, ptr %9, align 4, !tbaa !9
  %377 = mul nsw i32 %375, %376
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds double, ptr %373, i64 %378
  %380 = load double, ptr %379, align 8, !tbaa !29
  %381 = load double, ptr %25, align 8, !tbaa !29
  %382 = fcmp ogt double %380, %381
  br i1 %382, label %383, label %398

383:                                              ; preds = %367
  %384 = load i32, ptr %10, align 4, !tbaa !9
  %385 = getelementptr inbounds i8, ptr %33, i64 224
  %386 = getelementptr inbounds %"class.voro::voro_base", ptr %385, i32 0, i32 0
  %387 = load i32, ptr %386, align 8, !tbaa !11
  %388 = sub nsw i32 %384, %387
  %389 = load i32, ptr %20, align 4, !tbaa !9
  %390 = load i32, ptr %9, align 4, !tbaa !9
  %391 = load double, ptr %24, align 8, !tbaa !29
  %392 = load double, ptr %22, align 8, !tbaa !29
  %393 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %394 = load double, ptr %393, align 8, !tbaa !42
  %395 = load i32, ptr %13, align 4, !tbaa !9
  %396 = sitofp i32 %395 to double
  %397 = fmul double %394, %396
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %388, i32 noundef %389, i32 noundef %390, double noundef %391, double noundef %392, double noundef %397)
  br label %413

398:                                              ; preds = %367
  %399 = load i32, ptr %11, align 4, !tbaa !9
  %400 = getelementptr inbounds i8, ptr %33, i64 224
  %401 = getelementptr inbounds %"class.voro::voro_base", ptr %400, i32 0, i32 0
  %402 = load i32, ptr %401, align 8, !tbaa !11
  %403 = sub nsw i32 %399, %402
  %404 = load i32, ptr %20, align 4, !tbaa !9
  %405 = load i32, ptr %9, align 4, !tbaa !9
  %406 = load double, ptr %27, align 8, !tbaa !29
  %407 = load double, ptr %22, align 8, !tbaa !29
  %408 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %409 = load double, ptr %408, align 8, !tbaa !42
  %410 = load i32, ptr %13, align 4, !tbaa !9
  %411 = sitofp i32 %410 to double
  %412 = fmul double %409, %411
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %403, i32 noundef %404, i32 noundef %405, double noundef %406, double noundef %407, double noundef %412)
  br label %413

413:                                              ; preds = %398, %383
  br label %414

414:                                              ; preds = %413, %362
  br label %415

415:                                              ; preds = %414, %366
  %416 = load i32, ptr %9, align 4, !tbaa !9
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %9, align 4, !tbaa !9
  br label %298, !llvm.loop !43

418:                                              ; preds = %298
  br label %419

419:                                              ; preds = %418, %245
  %420 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %421 = load ptr, ptr %420, align 8, !tbaa !35
  %422 = load i32, ptr %10, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds i8, ptr %421, i64 %423
  %425 = load i8, ptr %424, align 1, !tbaa !36
  %426 = sext i8 %425 to i32
  %427 = and i32 %426, 2
  %428 = icmp eq i32 %427, 0
  br i1 %428, label %429, label %632

429:                                              ; preds = %419
  %430 = load i32, ptr %18, align 4, !tbaa !9
  %431 = getelementptr inbounds i8, ptr %33, i64 224
  %432 = getelementptr inbounds %"class.voro::voro_base", ptr %431, i32 0, i32 0
  %433 = load i32, ptr %432, align 8, !tbaa !11
  %434 = sub nsw i32 %433, 1
  %435 = icmp eq i32 %430, %434
  br i1 %435, label %436, label %461

436:                                              ; preds = %429
  %437 = load i32, ptr %20, align 4, !tbaa !9
  %438 = add nsw i32 %437, 1
  %439 = getelementptr inbounds i8, ptr %33, i64 224
  %440 = getelementptr inbounds %"class.voro::voro_base", ptr %439, i32 0, i32 0
  %441 = load i32, ptr %440, align 8, !tbaa !11
  %442 = sub nsw i32 %438, %441
  store i32 %442, ptr %21, align 4, !tbaa !9
  %443 = load double, ptr %25, align 8, !tbaa !29
  %444 = getelementptr inbounds i8, ptr %33, i64 224
  %445 = getelementptr inbounds %"class.voro::voro_base", ptr %444, i32 0, i32 0
  %446 = load i32, ptr %445, align 8, !tbaa !11
  %447 = sub nsw i32 1, %446
  %448 = sitofp i32 %447 to double
  %449 = getelementptr inbounds i8, ptr %33, i64 224
  %450 = getelementptr inbounds %"class.voro::voro_base", ptr %449, i32 0, i32 5
  %451 = load double, ptr %450, align 8, !tbaa !32
  %452 = call double @llvm.fmuladd.f64(double %448, double %451, double %443)
  store double %452, ptr %26, align 8, !tbaa !29
  %453 = load double, ptr %24, align 8, !tbaa !29
  %454 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %455 = load double, ptr %454, align 8, !tbaa !31
  %456 = fadd double %453, %455
  store double %456, ptr %29, align 8, !tbaa !29
  %457 = load double, ptr %28, align 8, !tbaa !29
  %458 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %459 = load double, ptr %458, align 8, !tbaa !31
  %460 = fadd double %457, %459
  store double %460, ptr %30, align 8, !tbaa !29
  br label %471

461:                                              ; preds = %429
  %462 = load i32, ptr %20, align 4, !tbaa !9
  %463 = add nsw i32 %462, 1
  store i32 %463, ptr %21, align 4, !tbaa !9
  %464 = load double, ptr %25, align 8, !tbaa !29
  %465 = getelementptr inbounds i8, ptr %33, i64 224
  %466 = getelementptr inbounds %"class.voro::voro_base", ptr %465, i32 0, i32 5
  %467 = load double, ptr %466, align 8, !tbaa !32
  %468 = fadd double %464, %467
  store double %468, ptr %26, align 8, !tbaa !29
  %469 = load double, ptr %24, align 8, !tbaa !29
  store double %469, ptr %29, align 8, !tbaa !29
  %470 = load double, ptr %28, align 8, !tbaa !29
  store double %470, ptr %30, align 8, !tbaa !29
  br label %471

471:                                              ; preds = %461, %436
  %472 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %473 = load ptr, ptr %472, align 8, !tbaa !35
  %474 = load i32, ptr %12, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i8, ptr %473, i64 %475
  %477 = load i8, ptr %476, align 1, !tbaa !36
  %478 = sext i8 %477 to i32
  %479 = or i32 %478, 1
  %480 = trunc i32 %479 to i8
  store i8 %480, ptr %476, align 1, !tbaa !36
  %481 = load i8, ptr %31, align 1, !tbaa !33, !range !37, !noundef !38
  %482 = trunc i8 %481 to i1
  br i1 %482, label %483, label %510

483:                                              ; preds = %471
  %484 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %485 = load ptr, ptr %484, align 8, !tbaa !35
  %486 = load i32, ptr %12, align 4, !tbaa !9
  %487 = getelementptr inbounds i8, ptr %33, i64 224
  %488 = getelementptr inbounds %"class.voro::voro_base", ptr %487, i32 0, i32 0
  %489 = load i32, ptr %488, align 8, !tbaa !11
  %490 = sub nsw i32 %486, %489
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i8, ptr %485, i64 %491
  %493 = load i8, ptr %492, align 1, !tbaa !36
  %494 = sext i8 %493 to i32
  %495 = or i32 %494, 4
  %496 = trunc i32 %495 to i8
  store i8 %496, ptr %492, align 1, !tbaa !36
  %497 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %498 = load ptr, ptr %497, align 8, !tbaa !35
  %499 = load i32, ptr %10, align 4, !tbaa !9
  %500 = getelementptr inbounds i8, ptr %33, i64 224
  %501 = getelementptr inbounds %"class.voro::voro_base", ptr %500, i32 0, i32 0
  %502 = load i32, ptr %501, align 8, !tbaa !11
  %503 = sub nsw i32 %499, %502
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds i8, ptr %498, i64 %504
  %506 = load i8, ptr %505, align 1, !tbaa !36
  %507 = sext i8 %506 to i32
  %508 = or i32 %507, 8
  %509 = trunc i32 %508 to i8
  store i8 %509, ptr %505, align 1, !tbaa !36
  br label %510

510:                                              ; preds = %483, %471
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %511

511:                                              ; preds = %628, %510
  %512 = load i32, ptr %9, align 4, !tbaa !9
  %513 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 11
  %514 = load ptr, ptr %513, align 8, !tbaa !39
  %515 = load i32, ptr %21, align 4, !tbaa !9
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds i32, ptr %514, i64 %516
  %518 = load i32, ptr %517, align 4, !tbaa !9
  %519 = icmp slt i32 %512, %518
  br i1 %519, label %520, label %631

520:                                              ; preds = %511
  %521 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %522 = load ptr, ptr %521, align 8, !tbaa !40
  %523 = load i32, ptr %21, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds ptr, ptr %522, i64 %524
  %526 = load ptr, ptr %525, align 8, !tbaa !5
  %527 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %528 = load i32, ptr %527, align 4, !tbaa !41
  %529 = load i32, ptr %9, align 4, !tbaa !9
  %530 = mul nsw i32 %528, %529
  %531 = add nsw i32 %530, 1
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds double, ptr %526, i64 %532
  %534 = load double, ptr %533, align 8, !tbaa !29
  %535 = load double, ptr %23, align 8, !tbaa !29
  %536 = fcmp ogt double %534, %535
  br i1 %536, label %537, label %576

537:                                              ; preds = %520
  %538 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %539 = load ptr, ptr %538, align 8, !tbaa !40
  %540 = load i32, ptr %21, align 4, !tbaa !9
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds ptr, ptr %539, i64 %541
  %543 = load ptr, ptr %542, align 8, !tbaa !5
  %544 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %545 = load i32, ptr %544, align 4, !tbaa !41
  %546 = load i32, ptr %9, align 4, !tbaa !9
  %547 = mul nsw i32 %545, %546
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds double, ptr %543, i64 %548
  %550 = load double, ptr %549, align 8, !tbaa !29
  %551 = load double, ptr %26, align 8, !tbaa !29
  %552 = fcmp ogt double %550, %551
  br i1 %552, label %553, label %564

553:                                              ; preds = %537
  %554 = load i32, ptr %12, align 4, !tbaa !9
  %555 = load i32, ptr %21, align 4, !tbaa !9
  %556 = load i32, ptr %9, align 4, !tbaa !9
  %557 = load double, ptr %30, align 8, !tbaa !29
  %558 = load double, ptr %22, align 8, !tbaa !29
  %559 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %560 = load double, ptr %559, align 8, !tbaa !42
  %561 = load i32, ptr %13, align 4, !tbaa !9
  %562 = sitofp i32 %561 to double
  %563 = fmul double %560, %562
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %554, i32 noundef %555, i32 noundef %556, double noundef %557, double noundef %558, double noundef %563)
  br label %575

564:                                              ; preds = %537
  %565 = load i32, ptr %10, align 4, !tbaa !9
  %566 = load i32, ptr %21, align 4, !tbaa !9
  %567 = load i32, ptr %9, align 4, !tbaa !9
  %568 = load double, ptr %29, align 8, !tbaa !29
  %569 = load double, ptr %22, align 8, !tbaa !29
  %570 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %571 = load double, ptr %570, align 8, !tbaa !42
  %572 = load i32, ptr %13, align 4, !tbaa !9
  %573 = sitofp i32 %572 to double
  %574 = fmul double %571, %573
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %565, i32 noundef %566, i32 noundef %567, double noundef %568, double noundef %569, double noundef %574)
  br label %575

575:                                              ; preds = %564, %553
  br label %627

576:                                              ; preds = %520
  %577 = load i8, ptr %31, align 1, !tbaa !33, !range !37, !noundef !38
  %578 = trunc i8 %577 to i1
  br i1 %578, label %580, label %579

579:                                              ; preds = %576
  br label %628

580:                                              ; preds = %576
  %581 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %582 = load ptr, ptr %581, align 8, !tbaa !40
  %583 = load i32, ptr %21, align 4, !tbaa !9
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds ptr, ptr %582, i64 %584
  %586 = load ptr, ptr %585, align 8, !tbaa !5
  %587 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %588 = load i32, ptr %587, align 4, !tbaa !41
  %589 = load i32, ptr %9, align 4, !tbaa !9
  %590 = mul nsw i32 %588, %589
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds double, ptr %586, i64 %591
  %593 = load double, ptr %592, align 8, !tbaa !29
  %594 = load double, ptr %26, align 8, !tbaa !29
  %595 = fcmp ogt double %593, %594
  br i1 %595, label %596, label %611

596:                                              ; preds = %580
  %597 = load i32, ptr %12, align 4, !tbaa !9
  %598 = getelementptr inbounds i8, ptr %33, i64 224
  %599 = getelementptr inbounds %"class.voro::voro_base", ptr %598, i32 0, i32 0
  %600 = load i32, ptr %599, align 8, !tbaa !11
  %601 = sub nsw i32 %597, %600
  %602 = load i32, ptr %21, align 4, !tbaa !9
  %603 = load i32, ptr %9, align 4, !tbaa !9
  %604 = load double, ptr %30, align 8, !tbaa !29
  %605 = load double, ptr %22, align 8, !tbaa !29
  %606 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %607 = load double, ptr %606, align 8, !tbaa !42
  %608 = load i32, ptr %13, align 4, !tbaa !9
  %609 = sitofp i32 %608 to double
  %610 = fmul double %607, %609
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %601, i32 noundef %602, i32 noundef %603, double noundef %604, double noundef %605, double noundef %610)
  br label %626

611:                                              ; preds = %580
  %612 = load i32, ptr %10, align 4, !tbaa !9
  %613 = getelementptr inbounds i8, ptr %33, i64 224
  %614 = getelementptr inbounds %"class.voro::voro_base", ptr %613, i32 0, i32 0
  %615 = load i32, ptr %614, align 8, !tbaa !11
  %616 = sub nsw i32 %612, %615
  %617 = load i32, ptr %21, align 4, !tbaa !9
  %618 = load i32, ptr %9, align 4, !tbaa !9
  %619 = load double, ptr %29, align 8, !tbaa !29
  %620 = load double, ptr %22, align 8, !tbaa !29
  %621 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %622 = load double, ptr %621, align 8, !tbaa !42
  %623 = load i32, ptr %13, align 4, !tbaa !9
  %624 = sitofp i32 %623 to double
  %625 = fmul double %622, %624
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %616, i32 noundef %617, i32 noundef %618, double noundef %619, double noundef %620, double noundef %625)
  br label %626

626:                                              ; preds = %611, %596
  br label %627

627:                                              ; preds = %626, %575
  br label %628

628:                                              ; preds = %627, %579
  %629 = load i32, ptr %9, align 4, !tbaa !9
  %630 = add nsw i32 %629, 1
  store i32 %630, ptr %9, align 4, !tbaa !9
  br label %511, !llvm.loop !45

631:                                              ; preds = %511
  br label %632

632:                                              ; preds = %631, %419
  %633 = load i32, ptr %19, align 4, !tbaa !9
  %634 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 4
  %635 = load i32, ptr %634, align 8, !tbaa !46
  %636 = sub nsw i32 %635, 1
  %637 = icmp eq i32 %633, %636
  br i1 %637, label %638, label %742

638:                                              ; preds = %632
  %639 = getelementptr inbounds i8, ptr %33, i64 224
  %640 = getelementptr inbounds %"class.voro::voro_base", ptr %639, i32 0, i32 0
  %641 = load i32, ptr %640, align 8, !tbaa !11
  %642 = getelementptr inbounds i8, ptr %33, i64 224
  %643 = getelementptr inbounds %"class.voro::voro_base", ptr %642, i32 0, i32 1
  %644 = load i32, ptr %643, align 4, !tbaa !24
  %645 = sub nsw i32 1, %644
  %646 = mul nsw i32 %641, %645
  %647 = load i32, ptr %18, align 4, !tbaa !9
  %648 = sub nsw i32 %646, %647
  %649 = load i32, ptr %20, align 4, !tbaa !9
  %650 = add nsw i32 %649, %648
  store i32 %650, ptr %20, align 4, !tbaa !9
  %651 = getelementptr inbounds i8, ptr %33, i64 224
  %652 = getelementptr inbounds %"class.voro::voro_base", ptr %651, i32 0, i32 1
  %653 = load i32, ptr %652, align 4, !tbaa !24
  %654 = sub nsw i32 1, %653
  %655 = sitofp i32 %654 to double
  %656 = getelementptr inbounds i8, ptr %33, i64 224
  %657 = getelementptr inbounds %"class.voro::voro_base", ptr %656, i32 0, i32 6
  %658 = load double, ptr %657, align 8, !tbaa !30
  %659 = load double, ptr %23, align 8, !tbaa !29
  %660 = call double @llvm.fmuladd.f64(double %655, double %658, double %659)
  store double %660, ptr %23, align 8, !tbaa !29
  %661 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 2
  %662 = load double, ptr %661, align 8, !tbaa !28
  %663 = load double, ptr %22, align 8, !tbaa !29
  %664 = fadd double %663, %662
  store double %664, ptr %22, align 8, !tbaa !29
  %665 = load i32, ptr %6, align 4, !tbaa !9
  %666 = getelementptr inbounds i8, ptr %33, i64 224
  %667 = load i32, ptr %13, align 4, !tbaa !9
  %668 = sitofp i32 %667 to double
  %669 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 3
  %670 = load double, ptr %669, align 8, !tbaa !25
  %671 = load i32, ptr %15, align 4, !tbaa !9
  %672 = add nsw i32 %671, 1
  %673 = sitofp i32 %672 to double
  %674 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 1
  %675 = load double, ptr %674, align 8, !tbaa !26
  %676 = fmul double %673, %675
  %677 = call double @llvm.fmuladd.f64(double %668, double %670, double %676)
  %678 = fneg double %677
  %679 = getelementptr inbounds i8, ptr %33, i64 224
  %680 = getelementptr inbounds %"class.voro::voro_base", ptr %679, i32 0, i32 8
  %681 = load double, ptr %680, align 8, !tbaa !27
  %682 = fmul double %678, %681
  %683 = call noundef i32 @_ZN4voro9voro_base8step_intEd(ptr noundef nonnull align 8 dereferenceable(80) %666, double noundef %682)
  %684 = add nsw i32 %665, %683
  store i32 %684, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %685 = getelementptr inbounds i8, ptr %33, i64 224
  %686 = load i32, ptr %16, align 4, !tbaa !9
  %687 = getelementptr inbounds i8, ptr %33, i64 224
  %688 = getelementptr inbounds %"class.voro::voro_base", ptr %687, i32 0, i32 0
  %689 = load i32, ptr %688, align 8, !tbaa !11
  %690 = call noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80) %685, i32 noundef %686, i32 noundef %689)
  %691 = load i32, ptr %17, align 4, !tbaa !9
  %692 = sub nsw i32 %690, %691
  store i32 %692, ptr %32, align 4, !tbaa !9
  %693 = load i32, ptr %32, align 4, !tbaa !9
  %694 = load i32, ptr %17, align 4, !tbaa !9
  %695 = add nsw i32 %694, %693
  store i32 %695, ptr %17, align 4, !tbaa !9
  %696 = load i32, ptr %16, align 4, !tbaa !9
  %697 = load i32, ptr %17, align 4, !tbaa !9
  %698 = getelementptr inbounds i8, ptr %33, i64 224
  %699 = getelementptr inbounds %"class.voro::voro_base", ptr %698, i32 0, i32 0
  %700 = load i32, ptr %699, align 8, !tbaa !11
  %701 = mul nsw i32 %697, %700
  %702 = sub nsw i32 %696, %701
  store i32 %702, ptr %18, align 4, !tbaa !9
  %703 = load i32, ptr %18, align 4, !tbaa !9
  %704 = load i32, ptr %20, align 4, !tbaa !9
  %705 = add nsw i32 %704, %703
  store i32 %705, ptr %20, align 4, !tbaa !9
  %706 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 1
  %707 = load double, ptr %706, align 8, !tbaa !26
  %708 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %709 = load double, ptr %708, align 8, !tbaa !31
  %710 = load i32, ptr %32, align 4, !tbaa !9
  %711 = sitofp i32 %710 to double
  %712 = call double @llvm.fmuladd.f64(double %709, double %711, double %707)
  %713 = load double, ptr %24, align 8, !tbaa !29
  %714 = fadd double %713, %712
  store double %714, ptr %24, align 8, !tbaa !29
  %715 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 1
  %716 = load double, ptr %715, align 8, !tbaa !26
  %717 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %718 = load double, ptr %717, align 8, !tbaa !31
  %719 = load i32, ptr %32, align 4, !tbaa !9
  %720 = sitofp i32 %719 to double
  %721 = call double @llvm.fmuladd.f64(double %718, double %720, double %716)
  %722 = load double, ptr %27, align 8, !tbaa !29
  %723 = fadd double %722, %721
  store double %723, ptr %27, align 8, !tbaa !29
  %724 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 1
  %725 = load double, ptr %724, align 8, !tbaa !26
  %726 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %727 = load double, ptr %726, align 8, !tbaa !31
  %728 = load i32, ptr %32, align 4, !tbaa !9
  %729 = sitofp i32 %728 to double
  %730 = call double @llvm.fmuladd.f64(double %727, double %729, double %725)
  %731 = load double, ptr %28, align 8, !tbaa !29
  %732 = fadd double %731, %730
  store double %732, ptr %28, align 8, !tbaa !29
  %733 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 1
  %734 = load double, ptr %733, align 8, !tbaa !26
  %735 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %736 = load double, ptr %735, align 8, !tbaa !31
  %737 = load i32, ptr %32, align 4, !tbaa !9
  %738 = sitofp i32 %737 to double
  %739 = call double @llvm.fmuladd.f64(double %736, double %738, double %734)
  %740 = load double, ptr %25, align 8, !tbaa !29
  %741 = fsub double %740, %739
  store double %741, ptr %25, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %753

742:                                              ; preds = %632
  %743 = getelementptr inbounds i8, ptr %33, i64 224
  %744 = getelementptr inbounds %"class.voro::voro_base", ptr %743, i32 0, i32 0
  %745 = load i32, ptr %744, align 8, !tbaa !11
  %746 = load i32, ptr %20, align 4, !tbaa !9
  %747 = add nsw i32 %746, %745
  store i32 %747, ptr %20, align 4, !tbaa !9
  %748 = getelementptr inbounds i8, ptr %33, i64 224
  %749 = getelementptr inbounds %"class.voro::voro_base", ptr %748, i32 0, i32 6
  %750 = load double, ptr %749, align 8, !tbaa !30
  %751 = load double, ptr %23, align 8, !tbaa !29
  %752 = fadd double %751, %750
  store double %752, ptr %23, align 8, !tbaa !29
  br label %753

753:                                              ; preds = %742, %638
  %754 = load i32, ptr %7, align 4, !tbaa !9
  %755 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 6
  %756 = load i32, ptr %755, align 8, !tbaa !14
  %757 = sub nsw i32 %756, 1
  %758 = icmp ne i32 %754, %757
  %759 = zext i1 %758 to i8
  store i8 %759, ptr %31, align 1, !tbaa !33
  %760 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %761 = load ptr, ptr %760, align 8, !tbaa !35
  %762 = load i32, ptr %10, align 4, !tbaa !9
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds i8, ptr %761, i64 %763
  %765 = load i8, ptr %764, align 1, !tbaa !36
  %766 = sext i8 %765 to i32
  %767 = and i32 %766, 4
  %768 = icmp eq i32 %767, 0
  br i1 %768, label %769, label %930

769:                                              ; preds = %753
  %770 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %771 = load ptr, ptr %770, align 8, !tbaa !35
  %772 = load i32, ptr %11, align 4, !tbaa !9
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds i8, ptr %771, i64 %773
  %775 = load i8, ptr %774, align 1, !tbaa !36
  %776 = sext i8 %775 to i32
  %777 = or i32 %776, 8
  %778 = trunc i32 %777 to i8
  store i8 %778, ptr %774, align 1, !tbaa !36
  %779 = load i8, ptr %31, align 1, !tbaa !33, !range !37, !noundef !38
  %780 = trunc i8 %779 to i1
  br i1 %780, label %781, label %808

781:                                              ; preds = %769
  %782 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %783 = load ptr, ptr %782, align 8, !tbaa !35
  %784 = load i32, ptr %11, align 4, !tbaa !9
  %785 = getelementptr inbounds i8, ptr %33, i64 224
  %786 = getelementptr inbounds %"class.voro::voro_base", ptr %785, i32 0, i32 0
  %787 = load i32, ptr %786, align 8, !tbaa !11
  %788 = add nsw i32 %784, %787
  %789 = sext i32 %788 to i64
  %790 = getelementptr inbounds i8, ptr %783, i64 %789
  %791 = load i8, ptr %790, align 1, !tbaa !36
  %792 = sext i8 %791 to i32
  %793 = or i32 %792, 2
  %794 = trunc i32 %793 to i8
  store i8 %794, ptr %790, align 1, !tbaa !36
  %795 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %796 = load ptr, ptr %795, align 8, !tbaa !35
  %797 = load i32, ptr %10, align 4, !tbaa !9
  %798 = getelementptr inbounds i8, ptr %33, i64 224
  %799 = getelementptr inbounds %"class.voro::voro_base", ptr %798, i32 0, i32 0
  %800 = load i32, ptr %799, align 8, !tbaa !11
  %801 = add nsw i32 %797, %800
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds i8, ptr %796, i64 %802
  %804 = load i8, ptr %803, align 1, !tbaa !36
  %805 = sext i8 %804 to i32
  %806 = or i32 %805, 1
  %807 = trunc i32 %806 to i8
  store i8 %807, ptr %803, align 1, !tbaa !36
  br label %808

808:                                              ; preds = %781, %769
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %809

809:                                              ; preds = %926, %808
  %810 = load i32, ptr %9, align 4, !tbaa !9
  %811 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 11
  %812 = load ptr, ptr %811, align 8, !tbaa !39
  %813 = load i32, ptr %20, align 4, !tbaa !9
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i32, ptr %812, i64 %814
  %816 = load i32, ptr %815, align 4, !tbaa !9
  %817 = icmp slt i32 %810, %816
  br i1 %817, label %818, label %929

818:                                              ; preds = %809
  %819 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %820 = load ptr, ptr %819, align 8, !tbaa !40
  %821 = load i32, ptr %20, align 4, !tbaa !9
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds ptr, ptr %820, i64 %822
  %824 = load ptr, ptr %823, align 8, !tbaa !5
  %825 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %826 = load i32, ptr %825, align 4, !tbaa !41
  %827 = load i32, ptr %9, align 4, !tbaa !9
  %828 = mul nsw i32 %826, %827
  %829 = add nsw i32 %828, 1
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds double, ptr %824, i64 %830
  %832 = load double, ptr %831, align 8, !tbaa !29
  %833 = load double, ptr %23, align 8, !tbaa !29
  %834 = fcmp ogt double %832, %833
  br i1 %834, label %835, label %886

835:                                              ; preds = %818
  %836 = load i8, ptr %31, align 1, !tbaa !33, !range !37, !noundef !38
  %837 = trunc i8 %836 to i1
  br i1 %837, label %839, label %838

838:                                              ; preds = %835
  br label %926

839:                                              ; preds = %835
  %840 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %841 = load ptr, ptr %840, align 8, !tbaa !40
  %842 = load i32, ptr %20, align 4, !tbaa !9
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds ptr, ptr %841, i64 %843
  %845 = load ptr, ptr %844, align 8, !tbaa !5
  %846 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %847 = load i32, ptr %846, align 4, !tbaa !41
  %848 = load i32, ptr %9, align 4, !tbaa !9
  %849 = mul nsw i32 %847, %848
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds double, ptr %845, i64 %850
  %852 = load double, ptr %851, align 8, !tbaa !29
  %853 = load double, ptr %25, align 8, !tbaa !29
  %854 = fcmp ogt double %852, %853
  br i1 %854, label %855, label %870

855:                                              ; preds = %839
  %856 = load i32, ptr %10, align 4, !tbaa !9
  %857 = getelementptr inbounds i8, ptr %33, i64 224
  %858 = getelementptr inbounds %"class.voro::voro_base", ptr %857, i32 0, i32 0
  %859 = load i32, ptr %858, align 8, !tbaa !11
  %860 = add nsw i32 %856, %859
  %861 = load i32, ptr %20, align 4, !tbaa !9
  %862 = load i32, ptr %9, align 4, !tbaa !9
  %863 = load double, ptr %24, align 8, !tbaa !29
  %864 = load double, ptr %22, align 8, !tbaa !29
  %865 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %866 = load double, ptr %865, align 8, !tbaa !42
  %867 = load i32, ptr %13, align 4, !tbaa !9
  %868 = sitofp i32 %867 to double
  %869 = fmul double %866, %868
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %860, i32 noundef %861, i32 noundef %862, double noundef %863, double noundef %864, double noundef %869)
  br label %885

870:                                              ; preds = %839
  %871 = load i32, ptr %11, align 4, !tbaa !9
  %872 = getelementptr inbounds i8, ptr %33, i64 224
  %873 = getelementptr inbounds %"class.voro::voro_base", ptr %872, i32 0, i32 0
  %874 = load i32, ptr %873, align 8, !tbaa !11
  %875 = add nsw i32 %871, %874
  %876 = load i32, ptr %20, align 4, !tbaa !9
  %877 = load i32, ptr %9, align 4, !tbaa !9
  %878 = load double, ptr %27, align 8, !tbaa !29
  %879 = load double, ptr %22, align 8, !tbaa !29
  %880 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %881 = load double, ptr %880, align 8, !tbaa !42
  %882 = load i32, ptr %13, align 4, !tbaa !9
  %883 = sitofp i32 %882 to double
  %884 = fmul double %881, %883
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %875, i32 noundef %876, i32 noundef %877, double noundef %878, double noundef %879, double noundef %884)
  br label %885

885:                                              ; preds = %870, %855
  br label %925

886:                                              ; preds = %818
  %887 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %888 = load ptr, ptr %887, align 8, !tbaa !40
  %889 = load i32, ptr %20, align 4, !tbaa !9
  %890 = sext i32 %889 to i64
  %891 = getelementptr inbounds ptr, ptr %888, i64 %890
  %892 = load ptr, ptr %891, align 8, !tbaa !5
  %893 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %894 = load i32, ptr %893, align 4, !tbaa !41
  %895 = load i32, ptr %9, align 4, !tbaa !9
  %896 = mul nsw i32 %894, %895
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds double, ptr %892, i64 %897
  %899 = load double, ptr %898, align 8, !tbaa !29
  %900 = load double, ptr %25, align 8, !tbaa !29
  %901 = fcmp ogt double %899, %900
  br i1 %901, label %902, label %913

902:                                              ; preds = %886
  %903 = load i32, ptr %10, align 4, !tbaa !9
  %904 = load i32, ptr %20, align 4, !tbaa !9
  %905 = load i32, ptr %9, align 4, !tbaa !9
  %906 = load double, ptr %24, align 8, !tbaa !29
  %907 = load double, ptr %22, align 8, !tbaa !29
  %908 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %909 = load double, ptr %908, align 8, !tbaa !42
  %910 = load i32, ptr %13, align 4, !tbaa !9
  %911 = sitofp i32 %910 to double
  %912 = fmul double %909, %911
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %903, i32 noundef %904, i32 noundef %905, double noundef %906, double noundef %907, double noundef %912)
  br label %924

913:                                              ; preds = %886
  %914 = load i32, ptr %11, align 4, !tbaa !9
  %915 = load i32, ptr %20, align 4, !tbaa !9
  %916 = load i32, ptr %9, align 4, !tbaa !9
  %917 = load double, ptr %27, align 8, !tbaa !29
  %918 = load double, ptr %22, align 8, !tbaa !29
  %919 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %920 = load double, ptr %919, align 8, !tbaa !42
  %921 = load i32, ptr %13, align 4, !tbaa !9
  %922 = sitofp i32 %921 to double
  %923 = fmul double %920, %922
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %914, i32 noundef %915, i32 noundef %916, double noundef %917, double noundef %918, double noundef %923)
  br label %924

924:                                              ; preds = %913, %902
  br label %925

925:                                              ; preds = %924, %885
  br label %926

926:                                              ; preds = %925, %838
  %927 = load i32, ptr %9, align 4, !tbaa !9
  %928 = add nsw i32 %927, 1
  store i32 %928, ptr %9, align 4, !tbaa !9
  br label %809, !llvm.loop !47

929:                                              ; preds = %809
  br label %930

930:                                              ; preds = %929, %753
  %931 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %932 = load ptr, ptr %931, align 8, !tbaa !35
  %933 = load i32, ptr %10, align 4, !tbaa !9
  %934 = sext i32 %933 to i64
  %935 = getelementptr inbounds i8, ptr %932, i64 %934
  %936 = load i8, ptr %935, align 1, !tbaa !36
  %937 = sext i8 %936 to i32
  %938 = and i32 %937, 8
  %939 = icmp eq i32 %938, 0
  br i1 %939, label %940, label %1143

940:                                              ; preds = %930
  %941 = load i32, ptr %18, align 4, !tbaa !9
  %942 = getelementptr inbounds i8, ptr %33, i64 224
  %943 = getelementptr inbounds %"class.voro::voro_base", ptr %942, i32 0, i32 0
  %944 = load i32, ptr %943, align 8, !tbaa !11
  %945 = sub nsw i32 %944, 1
  %946 = icmp eq i32 %941, %945
  br i1 %946, label %947, label %972

947:                                              ; preds = %940
  %948 = load i32, ptr %20, align 4, !tbaa !9
  %949 = add nsw i32 %948, 1
  %950 = getelementptr inbounds i8, ptr %33, i64 224
  %951 = getelementptr inbounds %"class.voro::voro_base", ptr %950, i32 0, i32 0
  %952 = load i32, ptr %951, align 8, !tbaa !11
  %953 = sub nsw i32 %949, %952
  store i32 %953, ptr %21, align 4, !tbaa !9
  %954 = load double, ptr %25, align 8, !tbaa !29
  %955 = getelementptr inbounds i8, ptr %33, i64 224
  %956 = getelementptr inbounds %"class.voro::voro_base", ptr %955, i32 0, i32 0
  %957 = load i32, ptr %956, align 8, !tbaa !11
  %958 = sub nsw i32 1, %957
  %959 = sitofp i32 %958 to double
  %960 = getelementptr inbounds i8, ptr %33, i64 224
  %961 = getelementptr inbounds %"class.voro::voro_base", ptr %960, i32 0, i32 5
  %962 = load double, ptr %961, align 8, !tbaa !32
  %963 = call double @llvm.fmuladd.f64(double %959, double %962, double %954)
  store double %963, ptr %26, align 8, !tbaa !29
  %964 = load double, ptr %24, align 8, !tbaa !29
  %965 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %966 = load double, ptr %965, align 8, !tbaa !31
  %967 = fadd double %964, %966
  store double %967, ptr %29, align 8, !tbaa !29
  %968 = load double, ptr %28, align 8, !tbaa !29
  %969 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 0
  %970 = load double, ptr %969, align 8, !tbaa !31
  %971 = fadd double %968, %970
  store double %971, ptr %30, align 8, !tbaa !29
  br label %982

972:                                              ; preds = %940
  %973 = load i32, ptr %20, align 4, !tbaa !9
  %974 = add nsw i32 %973, 1
  store i32 %974, ptr %21, align 4, !tbaa !9
  %975 = load double, ptr %25, align 8, !tbaa !29
  %976 = getelementptr inbounds i8, ptr %33, i64 224
  %977 = getelementptr inbounds %"class.voro::voro_base", ptr %976, i32 0, i32 5
  %978 = load double, ptr %977, align 8, !tbaa !32
  %979 = fadd double %975, %978
  store double %979, ptr %26, align 8, !tbaa !29
  %980 = load double, ptr %24, align 8, !tbaa !29
  store double %980, ptr %29, align 8, !tbaa !29
  %981 = load double, ptr %28, align 8, !tbaa !29
  store double %981, ptr %30, align 8, !tbaa !29
  br label %982

982:                                              ; preds = %972, %947
  %983 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %984 = load ptr, ptr %983, align 8, !tbaa !35
  %985 = load i32, ptr %12, align 4, !tbaa !9
  %986 = sext i32 %985 to i64
  %987 = getelementptr inbounds i8, ptr %984, i64 %986
  %988 = load i8, ptr %987, align 1, !tbaa !36
  %989 = sext i8 %988 to i32
  %990 = or i32 %989, 4
  %991 = trunc i32 %990 to i8
  store i8 %991, ptr %987, align 1, !tbaa !36
  %992 = load i8, ptr %31, align 1, !tbaa !33, !range !37, !noundef !38
  %993 = trunc i8 %992 to i1
  br i1 %993, label %994, label %1021

994:                                              ; preds = %982
  %995 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %996 = load ptr, ptr %995, align 8, !tbaa !35
  %997 = load i32, ptr %12, align 4, !tbaa !9
  %998 = getelementptr inbounds i8, ptr %33, i64 224
  %999 = getelementptr inbounds %"class.voro::voro_base", ptr %998, i32 0, i32 0
  %1000 = load i32, ptr %999, align 8, !tbaa !11
  %1001 = add nsw i32 %997, %1000
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds i8, ptr %996, i64 %1002
  %1004 = load i8, ptr %1003, align 1, !tbaa !36
  %1005 = sext i8 %1004 to i32
  %1006 = or i32 %1005, 1
  %1007 = trunc i32 %1006 to i8
  store i8 %1007, ptr %1003, align 1, !tbaa !36
  %1008 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %1009 = load ptr, ptr %1008, align 8, !tbaa !35
  %1010 = load i32, ptr %10, align 4, !tbaa !9
  %1011 = getelementptr inbounds i8, ptr %33, i64 224
  %1012 = getelementptr inbounds %"class.voro::voro_base", ptr %1011, i32 0, i32 0
  %1013 = load i32, ptr %1012, align 8, !tbaa !11
  %1014 = add nsw i32 %1010, %1013
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds i8, ptr %1009, i64 %1015
  %1017 = load i8, ptr %1016, align 1, !tbaa !36
  %1018 = sext i8 %1017 to i32
  %1019 = or i32 %1018, 2
  %1020 = trunc i32 %1019 to i8
  store i8 %1020, ptr %1016, align 1, !tbaa !36
  br label %1021

1021:                                             ; preds = %994, %982
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %1022

1022:                                             ; preds = %1139, %1021
  %1023 = load i32, ptr %9, align 4, !tbaa !9
  %1024 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 11
  %1025 = load ptr, ptr %1024, align 8, !tbaa !39
  %1026 = load i32, ptr %21, align 4, !tbaa !9
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds i32, ptr %1025, i64 %1027
  %1029 = load i32, ptr %1028, align 4, !tbaa !9
  %1030 = icmp slt i32 %1023, %1029
  br i1 %1030, label %1031, label %1142

1031:                                             ; preds = %1022
  %1032 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %1033 = load ptr, ptr %1032, align 8, !tbaa !40
  %1034 = load i32, ptr %21, align 4, !tbaa !9
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds ptr, ptr %1033, i64 %1035
  %1037 = load ptr, ptr %1036, align 8, !tbaa !5
  %1038 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %1039 = load i32, ptr %1038, align 4, !tbaa !41
  %1040 = load i32, ptr %9, align 4, !tbaa !9
  %1041 = mul nsw i32 %1039, %1040
  %1042 = add nsw i32 %1041, 1
  %1043 = sext i32 %1042 to i64
  %1044 = getelementptr inbounds double, ptr %1037, i64 %1043
  %1045 = load double, ptr %1044, align 8, !tbaa !29
  %1046 = load double, ptr %23, align 8, !tbaa !29
  %1047 = fcmp ogt double %1045, %1046
  br i1 %1047, label %1048, label %1099

1048:                                             ; preds = %1031
  %1049 = load i8, ptr %31, align 1, !tbaa !33, !range !37, !noundef !38
  %1050 = trunc i8 %1049 to i1
  br i1 %1050, label %1052, label %1051

1051:                                             ; preds = %1048
  br label %1139

1052:                                             ; preds = %1048
  %1053 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %1054 = load ptr, ptr %1053, align 8, !tbaa !40
  %1055 = load i32, ptr %21, align 4, !tbaa !9
  %1056 = sext i32 %1055 to i64
  %1057 = getelementptr inbounds ptr, ptr %1054, i64 %1056
  %1058 = load ptr, ptr %1057, align 8, !tbaa !5
  %1059 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %1060 = load i32, ptr %1059, align 4, !tbaa !41
  %1061 = load i32, ptr %9, align 4, !tbaa !9
  %1062 = mul nsw i32 %1060, %1061
  %1063 = sext i32 %1062 to i64
  %1064 = getelementptr inbounds double, ptr %1058, i64 %1063
  %1065 = load double, ptr %1064, align 8, !tbaa !29
  %1066 = load double, ptr %26, align 8, !tbaa !29
  %1067 = fcmp ogt double %1065, %1066
  br i1 %1067, label %1068, label %1083

1068:                                             ; preds = %1052
  %1069 = load i32, ptr %12, align 4, !tbaa !9
  %1070 = getelementptr inbounds i8, ptr %33, i64 224
  %1071 = getelementptr inbounds %"class.voro::voro_base", ptr %1070, i32 0, i32 0
  %1072 = load i32, ptr %1071, align 8, !tbaa !11
  %1073 = add nsw i32 %1069, %1072
  %1074 = load i32, ptr %21, align 4, !tbaa !9
  %1075 = load i32, ptr %9, align 4, !tbaa !9
  %1076 = load double, ptr %30, align 8, !tbaa !29
  %1077 = load double, ptr %22, align 8, !tbaa !29
  %1078 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %1079 = load double, ptr %1078, align 8, !tbaa !42
  %1080 = load i32, ptr %13, align 4, !tbaa !9
  %1081 = sitofp i32 %1080 to double
  %1082 = fmul double %1079, %1081
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %1073, i32 noundef %1074, i32 noundef %1075, double noundef %1076, double noundef %1077, double noundef %1082)
  br label %1098

1083:                                             ; preds = %1052
  %1084 = load i32, ptr %10, align 4, !tbaa !9
  %1085 = getelementptr inbounds i8, ptr %33, i64 224
  %1086 = getelementptr inbounds %"class.voro::voro_base", ptr %1085, i32 0, i32 0
  %1087 = load i32, ptr %1086, align 8, !tbaa !11
  %1088 = add nsw i32 %1084, %1087
  %1089 = load i32, ptr %21, align 4, !tbaa !9
  %1090 = load i32, ptr %9, align 4, !tbaa !9
  %1091 = load double, ptr %29, align 8, !tbaa !29
  %1092 = load double, ptr %22, align 8, !tbaa !29
  %1093 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %1094 = load double, ptr %1093, align 8, !tbaa !42
  %1095 = load i32, ptr %13, align 4, !tbaa !9
  %1096 = sitofp i32 %1095 to double
  %1097 = fmul double %1094, %1096
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %1088, i32 noundef %1089, i32 noundef %1090, double noundef %1091, double noundef %1092, double noundef %1097)
  br label %1098

1098:                                             ; preds = %1083, %1068
  br label %1138

1099:                                             ; preds = %1031
  %1100 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %1101 = load ptr, ptr %1100, align 8, !tbaa !40
  %1102 = load i32, ptr %21, align 4, !tbaa !9
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds ptr, ptr %1101, i64 %1103
  %1105 = load ptr, ptr %1104, align 8, !tbaa !5
  %1106 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %1107 = load i32, ptr %1106, align 4, !tbaa !41
  %1108 = load i32, ptr %9, align 4, !tbaa !9
  %1109 = mul nsw i32 %1107, %1108
  %1110 = sext i32 %1109 to i64
  %1111 = getelementptr inbounds double, ptr %1105, i64 %1110
  %1112 = load double, ptr %1111, align 8, !tbaa !29
  %1113 = load double, ptr %26, align 8, !tbaa !29
  %1114 = fcmp ogt double %1112, %1113
  br i1 %1114, label %1115, label %1126

1115:                                             ; preds = %1099
  %1116 = load i32, ptr %12, align 4, !tbaa !9
  %1117 = load i32, ptr %21, align 4, !tbaa !9
  %1118 = load i32, ptr %9, align 4, !tbaa !9
  %1119 = load double, ptr %30, align 8, !tbaa !29
  %1120 = load double, ptr %22, align 8, !tbaa !29
  %1121 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %1122 = load double, ptr %1121, align 8, !tbaa !42
  %1123 = load i32, ptr %13, align 4, !tbaa !9
  %1124 = sitofp i32 %1123 to double
  %1125 = fmul double %1122, %1124
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %1116, i32 noundef %1117, i32 noundef %1118, double noundef %1119, double noundef %1120, double noundef %1125)
  br label %1137

1126:                                             ; preds = %1099
  %1127 = load i32, ptr %10, align 4, !tbaa !9
  %1128 = load i32, ptr %21, align 4, !tbaa !9
  %1129 = load i32, ptr %9, align 4, !tbaa !9
  %1130 = load double, ptr %29, align 8, !tbaa !29
  %1131 = load double, ptr %22, align 8, !tbaa !29
  %1132 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 5
  %1133 = load double, ptr %1132, align 8, !tbaa !42
  %1134 = load i32, ptr %13, align 4, !tbaa !9
  %1135 = sitofp i32 %1134 to double
  %1136 = fmul double %1133, %1135
  call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %33, i32 noundef %1127, i32 noundef %1128, i32 noundef %1129, double noundef %1130, double noundef %1131, double noundef %1136)
  br label %1137

1137:                                             ; preds = %1126, %1115
  br label %1138

1138:                                             ; preds = %1137, %1098
  br label %1139

1139:                                             ; preds = %1138, %1051
  %1140 = load i32, ptr %9, align 4, !tbaa !9
  %1141 = add nsw i32 %1140, 1
  store i32 %1141, ptr %9, align 4, !tbaa !9
  br label %1022, !llvm.loop !48

1142:                                             ; preds = %1022
  br label %1143

1143:                                             ; preds = %1142, %930
  %1144 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %1145 = load ptr, ptr %1144, align 8, !tbaa !35
  %1146 = load i32, ptr %10, align 4, !tbaa !9
  %1147 = sext i32 %1146 to i64
  %1148 = getelementptr inbounds i8, ptr %1145, i64 %1147
  store i8 15, ptr %1148, align 1, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, 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
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTSN4voro9voro_baseE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !6, i64 72}
!13 = !{!"double", !7, i64 0}
!14 = !{!15, !10, i64 320}
!15 = !{!"_ZTSN4voro23container_periodic_baseE", !16, i64 0, !12, i64 224, !10, i64 304, !10, i64 308, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368, !10, i64 376, !10, i64 380}
!16 = !{!"_ZTSN4voro8unitcellE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !17, i64 48, !13, i64 208, !13, i64 216}
!17 = !{!"_ZTSN4voro11voronoicellE", !18, i64 0}
!18 = !{!"_ZTSN4voro16voronoicell_baseE", !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 116, !6, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152}
!19 = !{!15, !10, i64 308}
!20 = !{!12, !10, i64 8}
!21 = !{!16, !13, i64 32}
!22 = !{!12, !13, i64 56}
!23 = !{!15, !10, i64 304}
!24 = !{!12, !10, i64 4}
!25 = !{!16, !13, i64 24}
!26 = !{!16, !13, i64 8}
!27 = !{!12, !13, i64 48}
!28 = !{!16, !13, i64 16}
!29 = !{!13, !13, i64 0}
!30 = !{!12, !13, i64 32}
!31 = !{!16, !13, i64 0}
!32 = !{!12, !13, i64 24}
!33 = !{!34, !34, i64 0}
!34 = !{!"bool", !7, i64 0}
!35 = !{!15, !6, i64 368}
!36 = !{!7, !7, i64 0}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!15, !6, i64 352}
!40 = !{!15, !6, i64 344}
!41 = !{!15, !10, i64 380}
!42 = !{!16, !13, i64 40}
!43 = distinct !{!43, !44}
!44 = !{!"llvm.loop.mustprogress"}
!45 = distinct !{!45, !44}
!46 = !{!15, !10, i64 312}
!47 = distinct !{!47, !44}
!48 = distinct !{!48, !44}


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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN4voro9voro_base8step_intEd(ptr noundef nonnull align 8 dereferenceable(80), double noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80), i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384), i32 noundef, i32 noundef, i32 noundef, double noundef, double noundef, double noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4voro23container_periodic_base21create_vertical_imageEiii(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #2 align 2 {
  %5 = getelementptr inbounds i8, ptr %0, i64 224
  %6 = load i32, ptr %5, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 320
  %8 = load i32, ptr %7, align 8, !tbaa !12
  %9 = mul nsw i32 %8, %3
  %10 = add nsw i32 %9, %2
  %11 = mul nsw i32 %10, %6
  %12 = add nsw i32 %11, %1
  %13 = getelementptr inbounds i8, ptr %0, i64 308
  %14 = load i32, ptr %13, align 4, !tbaa !17
  %15 = sub nsw i32 %3, %14
  %16 = getelementptr inbounds i8, ptr %0, i64 232
  %17 = load i32, ptr %16, align 8, !tbaa !18
  %18 = tail call noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80) %5, i32 noundef %15, i32 noundef %17)
  %19 = sub nsw i32 0, %18
  %20 = sitofp i32 %19 to double
  %21 = getelementptr inbounds i8, ptr %0, i64 32
  %22 = load double, ptr %21, align 8, !tbaa !19
  %23 = fmul double %22, %20
  %24 = getelementptr inbounds i8, ptr %0, i64 280
  %25 = load double, ptr %24, align 8, !tbaa !20
  %26 = fmul double %23, %25
  %27 = tail call noundef i32 @_ZN4voro9voro_base8step_intEd(ptr noundef nonnull align 8 dereferenceable(80) %5, double noundef %26)
  %28 = add nsw i32 %27, %2
  %29 = getelementptr inbounds i8, ptr %0, i64 304
  %30 = load i32, ptr %29, align 8, !tbaa !21
  %31 = sub nsw i32 %28, %30
  %32 = getelementptr inbounds i8, ptr %0, i64 228
  %33 = load i32, ptr %32, align 4, !tbaa !22
  %34 = tail call noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80) %5, i32 noundef %31, i32 noundef %33)
  %35 = getelementptr inbounds i8, ptr %0, i64 24
  %36 = load double, ptr %35, align 8, !tbaa !23
  %37 = sitofp i32 %34 to double
  %38 = getelementptr inbounds i8, ptr %0, i64 8
  %39 = load double, ptr %38, align 8, !tbaa !24
  %40 = fneg double %39
  %41 = fmul double %37, %40
  %42 = tail call double @llvm.fmuladd.f64(double %20, double %36, double %41)
  %43 = getelementptr inbounds i8, ptr %0, i64 272
  %44 = load double, ptr %43, align 8, !tbaa !25
  %45 = fmul double %44, %42
  %46 = tail call noundef i32 @_ZN4voro9voro_base8step_intEd(ptr noundef nonnull align 8 dereferenceable(80) %5, double noundef %45)
  %47 = add nsw i32 %46, %1
  %48 = load i32, ptr %5, align 8, !tbaa !5
  %49 = tail call noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80) %5, i32 noundef %47, i32 noundef %48)
  %50 = load i32, ptr %5, align 8, !tbaa !5
  %51 = mul nsw i32 %50, %49
  %52 = sub nsw i32 %47, %51
  %53 = load i32, ptr %32, align 4, !tbaa !22
  %54 = mul nsw i32 %53, %34
  %55 = sub nsw i32 %28, %54
  %56 = load i32, ptr %7, align 8, !tbaa !12
  %57 = load i32, ptr %16, align 8, !tbaa !18
  %58 = mul nsw i32 %57, %18
  %59 = sub nsw i32 %3, %58
  %60 = mul nsw i32 %59, %56
  %61 = add nsw i32 %60, %55
  %62 = mul nsw i32 %61, %50
  %63 = add nsw i32 %62, %52
  %64 = sitofp i32 %18 to double
  %65 = load double, ptr %21, align 8, !tbaa !19
  %66 = getelementptr inbounds i8, ptr %0, i64 16
  %67 = load double, ptr %66, align 8, !tbaa !26
  %68 = fmul double %67, %37
  %69 = tail call double @llvm.fmuladd.f64(double %64, double %65, double %68)
  %70 = load i32, ptr %29, align 8, !tbaa !21
  %71 = sub nsw i32 %2, %70
  %72 = sitofp i32 %71 to double
  %73 = getelementptr inbounds i8, ptr %0, i64 256
  %74 = load double, ptr %73, align 8, !tbaa !27
  %75 = fneg double %65
  %76 = fmul double %64, %75
  %77 = tail call double @llvm.fmuladd.f64(double %72, double %74, double %76)
  %78 = fneg double %37
  %79 = tail call double @llvm.fmuladd.f64(double %78, double %67, double %77)
  %80 = load double, ptr %35, align 8, !tbaa !23
  %81 = load double, ptr %38, align 8, !tbaa !24
  %82 = fmul double %81, %37
  %83 = tail call double @llvm.fmuladd.f64(double %64, double %80, double %82)
  %84 = sitofp i32 %49 to double
  %85 = load double, ptr %0, align 8
  %86 = tail call double @llvm.fmuladd.f64(double %84, double %85, double %83)
  %87 = sitofp i32 %1 to double
  %88 = getelementptr inbounds i8, ptr %0, i64 248
  %89 = load double, ptr %88, align 8, !tbaa !28
  %90 = fneg double %80
  %91 = fmul double %64, %90
  %92 = tail call double @llvm.fmuladd.f64(double %87, double %89, double %91)
  %93 = tail call double @llvm.fmuladd.f64(double %78, double %81, double %92)
  %94 = fneg double %84
  %95 = tail call double @llvm.fmuladd.f64(double %94, double %85, double %93)
  %96 = icmp eq i32 %1, 0
  %97 = fadd double %85, %86
  %98 = select i1 %96, i32 %50, i32 0
  %.0262 = select i1 %96, double %97, double %86
  %.0273.in = add i32 %12, -1
  %.0273 = add i32 %.0273.in, %98
  %99 = add nsw i32 %50, -1
  %100 = icmp eq i32 %99, %1
  %101 = fsub double %86, %85
  %102 = select i1 %100, i32 %50, i32 0
  %.0275.in = sub nsw i32 %12, %102
  %.0260 = select i1 %100, double %101, double %86
  %.0275 = add nsw i32 %.0275.in, 1
  %.not = icmp eq i32 %2, 0
  %103 = getelementptr inbounds i8, ptr %0, i64 368
  %104 = load ptr, ptr %103, align 8, !tbaa !29
  %105 = sext i32 %12 to i64
  %106 = getelementptr inbounds i8, ptr %104, i64 %105
  %107 = load i8, ptr %106, align 1, !tbaa !30
  %108 = and i8 %107, 1
  %109 = icmp eq i8 %108, 0
  br i1 %109, label %110, label %.loopexit280

110:                                              ; preds = %4
  %111 = sext i32 %.0273 to i64
  %112 = getelementptr inbounds i8, ptr %104, i64 %111
  %113 = load i8, ptr %112, align 1, !tbaa !30
  %114 = or i8 %113, 2
  store i8 %114, ptr %112, align 1, !tbaa !30
  br i1 %.not, label %130, label %115

115:                                              ; preds = %110
  %116 = load ptr, ptr %103, align 8, !tbaa !29
  %117 = load i32, ptr %5, align 8, !tbaa !5
  %118 = sub nsw i32 %.0273, %117
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds i8, ptr %116, i64 %119
  %121 = load i8, ptr %120, align 1, !tbaa !30
  %122 = or i8 %121, 8
  store i8 %122, ptr %120, align 1, !tbaa !30
  %123 = load ptr, ptr %103, align 8, !tbaa !29
  %124 = load i32, ptr %5, align 8, !tbaa !5
  %125 = sub nsw i32 %12, %124
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr %123, i64 %126
  %128 = load i8, ptr %127, align 1, !tbaa !30
  %129 = or i8 %128, 4
  store i8 %129, ptr %127, align 1, !tbaa !30
  br label %130

130:                                              ; preds = %115, %110
  %131 = getelementptr inbounds i8, ptr %0, i64 352
  %132 = sext i32 %63 to i64
  %133 = load ptr, ptr %131, align 8, !tbaa !31
  %134 = getelementptr inbounds i32, ptr %133, i64 %132
  %135 = load i32, ptr %134, align 4, !tbaa !32
  %136 = icmp sgt i32 %135, 0
  br i1 %136, label %.lr.ph, label %.loopexit280

.lr.ph:                                           ; preds = %130
  %137 = getelementptr inbounds i8, ptr %0, i64 344
  %138 = getelementptr inbounds i8, ptr %0, i64 380
  %139 = getelementptr inbounds i8, ptr %0, i64 40
  br label %140

140:                                              ; preds = %.lr.ph, %169
  %.0281 = phi i32 [ 0, %.lr.ph ], [ %170, %169 ]
  %141 = load ptr, ptr %137, align 8, !tbaa !33
  %142 = getelementptr inbounds ptr, ptr %141, i64 %132
  %143 = load ptr, ptr %142, align 8, !tbaa !34
  %144 = load i32, ptr %138, align 4, !tbaa !35
  %145 = mul nsw i32 %144, %.0281
  %146 = sext i32 %145 to i64
  %147 = getelementptr double, ptr %143, i64 %146
  %148 = getelementptr i8, ptr %147, i64 8
  %149 = load double, ptr %148, align 8, !tbaa !36
  %150 = fcmp ogt double %149, %79
  br i1 %150, label %151, label %158

151:                                              ; preds = %140
  %152 = load double, ptr %147, align 8, !tbaa !36
  %153 = fcmp ogt double %152, %95
  %154 = load double, ptr %139, align 8, !tbaa !37
  %155 = fmul double %154, %64
  br i1 %153, label %156, label %157

156:                                              ; preds = %151
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %12, i32 noundef %63, i32 noundef %.0281, double noundef %86, double noundef %69, double noundef %155)
  br label %169

157:                                              ; preds = %151
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %.0273, i32 noundef %63, i32 noundef %.0281, double noundef %.0262, double noundef %69, double noundef %155)
  br label %169

158:                                              ; preds = %140
  br i1 %.not, label %169, label %159

159:                                              ; preds = %158
  %160 = load double, ptr %147, align 8, !tbaa !36
  %161 = fcmp ogt double %160, %95
  %162 = load i32, ptr %5, align 8, !tbaa !5
  %163 = load double, ptr %139, align 8, !tbaa !37
  %164 = fmul double %163, %64
  br i1 %161, label %165, label %167

165:                                              ; preds = %159
  %166 = sub nsw i32 %12, %162
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %166, i32 noundef %63, i32 noundef %.0281, double noundef %86, double noundef %69, double noundef %164)
  br label %169

167:                                              ; preds = %159
  %168 = sub nsw i32 %.0273, %162
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %168, i32 noundef %63, i32 noundef %.0281, double noundef %.0262, double noundef %69, double noundef %164)
  br label %169

169:                                              ; preds = %157, %156, %167, %165, %158
  %170 = add nuw nsw i32 %.0281, 1
  %171 = load ptr, ptr %131, align 8, !tbaa !31
  %172 = getelementptr inbounds i32, ptr %171, i64 %132
  %173 = load i32, ptr %172, align 4, !tbaa !32
  %174 = icmp slt i32 %170, %173
  br i1 %174, label %140, label %.loopexit280, !llvm.loop !38

.loopexit280:                                     ; preds = %169, %130, %4
  %175 = load ptr, ptr %103, align 8, !tbaa !29
  %176 = getelementptr inbounds i8, ptr %175, i64 %105
  %177 = load i8, ptr %176, align 1, !tbaa !30
  %178 = and i8 %177, 2
  %179 = icmp eq i8 %178, 0
  br i1 %179, label %180, label %.loopexit279

180:                                              ; preds = %.loopexit280
  %181 = load i32, ptr %5, align 8, !tbaa !5
  %182 = add nsw i32 %181, -1
  %183 = icmp eq i32 %52, %182
  %184 = add nsw i32 %63, 1
  br i1 %183, label %185, label %194

185:                                              ; preds = %180
  %186 = sub i32 %184, %181
  %187 = sub nsw i32 1, %181
  %188 = sitofp i32 %187 to double
  %189 = load double, ptr %88, align 8, !tbaa !28
  %190 = tail call double @llvm.fmuladd.f64(double %188, double %189, double %95)
  %191 = load double, ptr %0, align 8, !tbaa !40
  %192 = fadd double %86, %191
  %193 = fadd double %.0260, %191
  br label %197

194:                                              ; preds = %180
  %195 = load double, ptr %88, align 8, !tbaa !28
  %196 = fadd double %95, %195
  br label %197

197:                                              ; preds = %194, %185
  %.0270 = phi i32 [ %186, %185 ], [ %184, %194 ]
  %.0264 = phi double [ %190, %185 ], [ %196, %194 ]
  %.0258 = phi double [ %192, %185 ], [ %86, %194 ]
  %.0256 = phi double [ %193, %185 ], [ %.0260, %194 ]
  %198 = sext i32 %.0275 to i64
  %199 = getelementptr inbounds i8, ptr %175, i64 %198
  %200 = load i8, ptr %199, align 1, !tbaa !30
  %201 = or i8 %200, 1
  store i8 %201, ptr %199, align 1, !tbaa !30
  br i1 %.not, label %217, label %202

202:                                              ; preds = %197
  %203 = load ptr, ptr %103, align 8, !tbaa !29
  %204 = load i32, ptr %5, align 8, !tbaa !5
  %205 = sub nsw i32 %.0275, %204
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds i8, ptr %203, i64 %206
  %208 = load i8, ptr %207, align 1, !tbaa !30
  %209 = or i8 %208, 4
  store i8 %209, ptr %207, align 1, !tbaa !30
  %210 = load ptr, ptr %103, align 8, !tbaa !29
  %211 = load i32, ptr %5, align 8, !tbaa !5
  %212 = sub nsw i32 %12, %211
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i8, ptr %210, i64 %213
  %215 = load i8, ptr %214, align 1, !tbaa !30
  %216 = or i8 %215, 8
  store i8 %216, ptr %214, align 1, !tbaa !30
  br label %217

217:                                              ; preds = %202, %197
  %218 = getelementptr inbounds i8, ptr %0, i64 352
  %219 = sext i32 %.0270 to i64
  %220 = load ptr, ptr %218, align 8, !tbaa !31
  %221 = getelementptr inbounds i32, ptr %220, i64 %219
  %222 = load i32, ptr %221, align 4, !tbaa !32
  %223 = icmp sgt i32 %222, 0
  br i1 %223, label %.lr.ph283, label %.loopexit279

.lr.ph283:                                        ; preds = %217
  %224 = getelementptr inbounds i8, ptr %0, i64 344
  %225 = getelementptr inbounds i8, ptr %0, i64 380
  %226 = getelementptr inbounds i8, ptr %0, i64 40
  br label %227

227:                                              ; preds = %.lr.ph283, %256
  %.1282 = phi i32 [ 0, %.lr.ph283 ], [ %257, %256 ]
  %228 = load ptr, ptr %224, align 8, !tbaa !33
  %229 = getelementptr inbounds ptr, ptr %228, i64 %219
  %230 = load ptr, ptr %229, align 8, !tbaa !34
  %231 = load i32, ptr %225, align 4, !tbaa !35
  %232 = mul nsw i32 %231, %.1282
  %233 = sext i32 %232 to i64
  %234 = getelementptr double, ptr %230, i64 %233
  %235 = getelementptr i8, ptr %234, i64 8
  %236 = load double, ptr %235, align 8, !tbaa !36
  %237 = fcmp ogt double %236, %79
  br i1 %237, label %238, label %245

238:                                              ; preds = %227
  %239 = load double, ptr %234, align 8, !tbaa !36
  %240 = fcmp ogt double %239, %.0264
  %241 = load double, ptr %226, align 8, !tbaa !37
  %242 = fmul double %241, %64
  br i1 %240, label %243, label %244

243:                                              ; preds = %238
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %.0275, i32 noundef %.0270, i32 noundef %.1282, double noundef %.0256, double noundef %69, double noundef %242)
  br label %256

244:                                              ; preds = %238
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %12, i32 noundef %.0270, i32 noundef %.1282, double noundef %.0258, double noundef %69, double noundef %242)
  br label %256

245:                                              ; preds = %227
  br i1 %.not, label %256, label %246

246:                                              ; preds = %245
  %247 = load double, ptr %234, align 8, !tbaa !36
  %248 = fcmp ogt double %247, %.0264
  %249 = load i32, ptr %5, align 8, !tbaa !5
  %250 = load double, ptr %226, align 8, !tbaa !37
  %251 = fmul double %250, %64
  br i1 %248, label %252, label %254

252:                                              ; preds = %246
  %253 = sub nsw i32 %.0275, %249
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %253, i32 noundef %.0270, i32 noundef %.1282, double noundef %.0256, double noundef %69, double noundef %251)
  br label %256

254:                                              ; preds = %246
  %255 = sub nsw i32 %12, %249
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %255, i32 noundef %.0270, i32 noundef %.1282, double noundef %.0258, double noundef %69, double noundef %251)
  br label %256

256:                                              ; preds = %244, %243, %254, %252, %245
  %257 = add nuw nsw i32 %.1282, 1
  %258 = load ptr, ptr %218, align 8, !tbaa !31
  %259 = getelementptr inbounds i32, ptr %258, i64 %219
  %260 = load i32, ptr %259, align 4, !tbaa !32
  %261 = icmp slt i32 %257, %260
  br i1 %261, label %227, label %.loopexit279, !llvm.loop !41

.loopexit279:                                     ; preds = %256, %217, %.loopexit280
  %262 = getelementptr inbounds i8, ptr %0, i64 312
  %263 = load i32, ptr %262, align 8, !tbaa !42
  %264 = add nsw i32 %263, -1
  %265 = icmp eq i32 %55, %264
  %266 = load i32, ptr %5, align 8, !tbaa !5
  br i1 %265, label %267, label %303

267:                                              ; preds = %.loopexit279
  %268 = load i32, ptr %32, align 4, !tbaa !22
  %269 = sub nsw i32 1, %268
  %270 = mul nsw i32 %269, %266
  %271 = add i32 %270, %62
  %272 = sitofp i32 %269 to double
  %273 = load double, ptr %73, align 8, !tbaa !27
  %274 = tail call double @llvm.fmuladd.f64(double %272, double %273, double %79)
  %275 = load double, ptr %66, align 8, !tbaa !26
  %276 = fadd double %69, %275
  %277 = load double, ptr %35, align 8, !tbaa !23
  %278 = add nsw i32 %34, 1
  %279 = sitofp i32 %278 to double
  %280 = load double, ptr %38, align 8, !tbaa !24
  %281 = fmul double %280, %279
  %282 = tail call double @llvm.fmuladd.f64(double %64, double %277, double %281)
  %283 = fneg double %282
  %284 = load double, ptr %43, align 8, !tbaa !25
  %285 = fmul double %284, %283
  %286 = tail call noundef i32 @_ZN4voro9voro_base8step_intEd(ptr noundef nonnull align 8 dereferenceable(80) %5, double noundef %285)
  %287 = add nsw i32 %286, %1
  %288 = load i32, ptr %5, align 8, !tbaa !5
  %289 = tail call noundef i32 @_ZN4voro9voro_base8step_divEii(ptr noundef nonnull align 8 dereferenceable(80) %5, i32 noundef %287, i32 noundef %288)
  %290 = sub nsw i32 %289, %49
  %291 = load i32, ptr %5, align 8, !tbaa !5
  %292 = mul nsw i32 %291, %289
  %293 = sub nsw i32 %287, %292
  %294 = add nsw i32 %271, %293
  %295 = load double, ptr %38, align 8, !tbaa !24
  %296 = load double, ptr %0, align 8, !tbaa !40
  %297 = sitofp i32 %290 to double
  %298 = tail call double @llvm.fmuladd.f64(double %296, double %297, double %295)
  %299 = fadd double %86, %298
  %300 = fadd double %.0262, %298
  %301 = fadd double %.0260, %298
  %302 = fsub double %95, %298
  br label %307

303:                                              ; preds = %.loopexit279
  %304 = add nsw i32 %266, %63
  %305 = load double, ptr %73, align 8, !tbaa !27
  %306 = fadd double %79, %305
  br label %307

307:                                              ; preds = %303, %267
  %.0274 = phi i32 [ %293, %267 ], [ %52, %303 ]
  %.0272 = phi i32 [ %294, %267 ], [ %304, %303 ]
  %.0269 = phi double [ %276, %267 ], [ %69, %303 ]
  %.0268 = phi double [ %274, %267 ], [ %306, %303 ]
  %.0267 = phi double [ %299, %267 ], [ %86, %303 ]
  %.0266 = phi double [ %302, %267 ], [ %95, %303 ]
  %.1263 = phi double [ %300, %267 ], [ %.0262, %303 ]
  %.1261 = phi double [ %301, %267 ], [ %.0260, %303 ]
  %308 = load i32, ptr %7, align 8, !tbaa !12
  %309 = add nsw i32 %308, -1
  %.not276 = icmp eq i32 %309, %2
  %310 = load ptr, ptr %103, align 8, !tbaa !29
  %311 = getelementptr inbounds i8, ptr %310, i64 %105
  %312 = load i8, ptr %311, align 1, !tbaa !30
  %313 = and i8 %312, 4
  %314 = icmp eq i8 %313, 0
  br i1 %314, label %315, label %.loopexit278

315:                                              ; preds = %307
  %316 = sext i32 %.0273 to i64
  %317 = getelementptr inbounds i8, ptr %310, i64 %316
  %318 = load i8, ptr %317, align 1, !tbaa !30
  %319 = or i8 %318, 8
  store i8 %319, ptr %317, align 1, !tbaa !30
  br i1 %.not276, label %335, label %320

320:                                              ; preds = %315
  %321 = load ptr, ptr %103, align 8, !tbaa !29
  %322 = load i32, ptr %5, align 8, !tbaa !5
  %323 = add nsw i32 %322, %.0273
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds i8, ptr %321, i64 %324
  %326 = load i8, ptr %325, align 1, !tbaa !30
  %327 = or i8 %326, 2
  store i8 %327, ptr %325, align 1, !tbaa !30
  %328 = load ptr, ptr %103, align 8, !tbaa !29
  %329 = load i32, ptr %5, align 8, !tbaa !5
  %330 = add nsw i32 %329, %12
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds i8, ptr %328, i64 %331
  %333 = load i8, ptr %332, align 1, !tbaa !30
  %334 = or i8 %333, 1
  store i8 %334, ptr %332, align 1, !tbaa !30
  br label %335

335:                                              ; preds = %320, %315
  %336 = getelementptr inbounds i8, ptr %0, i64 352
  %337 = sext i32 %.0272 to i64
  %338 = load ptr, ptr %336, align 8, !tbaa !31
  %339 = getelementptr inbounds i32, ptr %338, i64 %337
  %340 = load i32, ptr %339, align 4, !tbaa !32
  %341 = icmp sgt i32 %340, 0
  br i1 %341, label %.lr.ph285, label %.loopexit278

.lr.ph285:                                        ; preds = %335
  %342 = getelementptr inbounds i8, ptr %0, i64 344
  %343 = getelementptr inbounds i8, ptr %0, i64 380
  %344 = getelementptr inbounds i8, ptr %0, i64 40
  br label %345

345:                                              ; preds = %.lr.ph285, %374
  %.2284 = phi i32 [ 0, %.lr.ph285 ], [ %375, %374 ]
  %346 = load ptr, ptr %342, align 8, !tbaa !33
  %347 = getelementptr inbounds ptr, ptr %346, i64 %337
  %348 = load ptr, ptr %347, align 8, !tbaa !34
  %349 = load i32, ptr %343, align 4, !tbaa !35
  %350 = mul nsw i32 %349, %.2284
  %351 = sext i32 %350 to i64
  %352 = getelementptr double, ptr %348, i64 %351
  %353 = getelementptr i8, ptr %352, i64 8
  %354 = load double, ptr %353, align 8, !tbaa !36
  %355 = fcmp ogt double %354, %.0268
  br i1 %355, label %356, label %367

356:                                              ; preds = %345
  br i1 %.not276, label %374, label %357

357:                                              ; preds = %356
  %358 = load double, ptr %352, align 8, !tbaa !36
  %359 = fcmp ogt double %358, %.0266
  %360 = load i32, ptr %5, align 8, !tbaa !5
  %361 = load double, ptr %344, align 8, !tbaa !37
  %362 = fmul double %361, %64
  br i1 %359, label %363, label %365

363:                                              ; preds = %357
  %364 = add nsw i32 %360, %12
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %364, i32 noundef %.0272, i32 noundef %.2284, double noundef %.0267, double noundef %.0269, double noundef %362)
  br label %374

365:                                              ; preds = %357
  %366 = add nsw i32 %360, %.0273
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %366, i32 noundef %.0272, i32 noundef %.2284, double noundef %.1263, double noundef %.0269, double noundef %362)
  br label %374

367:                                              ; preds = %345
  %368 = load double, ptr %352, align 8, !tbaa !36
  %369 = fcmp ogt double %368, %.0266
  %370 = load double, ptr %344, align 8, !tbaa !37
  %371 = fmul double %370, %64
  br i1 %369, label %372, label %373

372:                                              ; preds = %367
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %12, i32 noundef %.0272, i32 noundef %.2284, double noundef %.0267, double noundef %.0269, double noundef %371)
  br label %374

373:                                              ; preds = %367
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %.0273, i32 noundef %.0272, i32 noundef %.2284, double noundef %.1263, double noundef %.0269, double noundef %371)
  br label %374

374:                                              ; preds = %365, %363, %373, %372, %356
  %375 = add nuw nsw i32 %.2284, 1
  %376 = load ptr, ptr %336, align 8, !tbaa !31
  %377 = getelementptr inbounds i32, ptr %376, i64 %337
  %378 = load i32, ptr %377, align 4, !tbaa !32
  %379 = icmp slt i32 %375, %378
  br i1 %379, label %345, label %.loopexit278, !llvm.loop !43

.loopexit278:                                     ; preds = %374, %335, %307
  %380 = load ptr, ptr %103, align 8, !tbaa !29
  %381 = getelementptr inbounds i8, ptr %380, i64 %105
  %382 = load i8, ptr %381, align 1, !tbaa !30
  %383 = and i8 %382, 8
  %384 = icmp eq i8 %383, 0
  br i1 %384, label %385, label %.loopexit

385:                                              ; preds = %.loopexit278
  %386 = load i32, ptr %5, align 8, !tbaa !5
  %387 = add nsw i32 %386, -1
  %388 = icmp eq i32 %.0274, %387
  %389 = add nsw i32 %.0272, 1
  br i1 %388, label %390, label %399

390:                                              ; preds = %385
  %391 = sub i32 %389, %386
  %392 = sub nsw i32 1, %386
  %393 = sitofp i32 %392 to double
  %394 = load double, ptr %88, align 8, !tbaa !28
  %395 = tail call double @llvm.fmuladd.f64(double %393, double %394, double %.0266)
  %396 = load double, ptr %0, align 8, !tbaa !40
  %397 = fadd double %.0267, %396
  %398 = fadd double %.1261, %396
  br label %402

399:                                              ; preds = %385
  %400 = load double, ptr %88, align 8, !tbaa !28
  %401 = fadd double %.0266, %400
  br label %402

402:                                              ; preds = %399, %390
  %.1271 = phi i32 [ %391, %390 ], [ %389, %399 ]
  %.1265 = phi double [ %395, %390 ], [ %401, %399 ]
  %.1259 = phi double [ %397, %390 ], [ %.0267, %399 ]
  %.1257 = phi double [ %398, %390 ], [ %.1261, %399 ]
  %403 = sext i32 %.0275 to i64
  %404 = getelementptr inbounds i8, ptr %380, i64 %403
  %405 = load i8, ptr %404, align 1, !tbaa !30
  %406 = or i8 %405, 4
  store i8 %406, ptr %404, align 1, !tbaa !30
  br i1 %.not276, label %422, label %407

407:                                              ; preds = %402
  %408 = load ptr, ptr %103, align 8, !tbaa !29
  %409 = load i32, ptr %5, align 8, !tbaa !5
  %410 = add nsw i32 %409, %.0275
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds i8, ptr %408, i64 %411
  %413 = load i8, ptr %412, align 1, !tbaa !30
  %414 = or i8 %413, 1
  store i8 %414, ptr %412, align 1, !tbaa !30
  %415 = load ptr, ptr %103, align 8, !tbaa !29
  %416 = load i32, ptr %5, align 8, !tbaa !5
  %417 = add nsw i32 %416, %12
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds i8, ptr %415, i64 %418
  %420 = load i8, ptr %419, align 1, !tbaa !30
  %421 = or i8 %420, 2
  store i8 %421, ptr %419, align 1, !tbaa !30
  br label %422

422:                                              ; preds = %407, %402
  %423 = getelementptr inbounds i8, ptr %0, i64 352
  %424 = sext i32 %.1271 to i64
  %425 = load ptr, ptr %423, align 8, !tbaa !31
  %426 = getelementptr inbounds i32, ptr %425, i64 %424
  %427 = load i32, ptr %426, align 4, !tbaa !32
  %428 = icmp sgt i32 %427, 0
  br i1 %428, label %.lr.ph287, label %.loopexit

.lr.ph287:                                        ; preds = %422
  %429 = getelementptr inbounds i8, ptr %0, i64 344
  %430 = getelementptr inbounds i8, ptr %0, i64 380
  %431 = getelementptr inbounds i8, ptr %0, i64 40
  br label %432

432:                                              ; preds = %.lr.ph287, %461
  %.3286 = phi i32 [ 0, %.lr.ph287 ], [ %462, %461 ]
  %433 = load ptr, ptr %429, align 8, !tbaa !33
  %434 = getelementptr inbounds ptr, ptr %433, i64 %424
  %435 = load ptr, ptr %434, align 8, !tbaa !34
  %436 = load i32, ptr %430, align 4, !tbaa !35
  %437 = mul nsw i32 %436, %.3286
  %438 = sext i32 %437 to i64
  %439 = getelementptr double, ptr %435, i64 %438
  %440 = getelementptr i8, ptr %439, i64 8
  %441 = load double, ptr %440, align 8, !tbaa !36
  %442 = fcmp ogt double %441, %.0268
  br i1 %442, label %443, label %454

443:                                              ; preds = %432
  br i1 %.not276, label %461, label %444

444:                                              ; preds = %443
  %445 = load double, ptr %439, align 8, !tbaa !36
  %446 = fcmp ogt double %445, %.1265
  %447 = load i32, ptr %5, align 8, !tbaa !5
  %448 = load double, ptr %431, align 8, !tbaa !37
  %449 = fmul double %448, %64
  br i1 %446, label %450, label %452

450:                                              ; preds = %444
  %451 = add nsw i32 %447, %.0275
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %451, i32 noundef %.1271, i32 noundef %.3286, double noundef %.1257, double noundef %.0269, double noundef %449)
  br label %461

452:                                              ; preds = %444
  %453 = add nsw i32 %447, %12
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %453, i32 noundef %.1271, i32 noundef %.3286, double noundef %.1259, double noundef %.0269, double noundef %449)
  br label %461

454:                                              ; preds = %432
  %455 = load double, ptr %439, align 8, !tbaa !36
  %456 = fcmp ogt double %455, %.1265
  %457 = load double, ptr %431, align 8, !tbaa !37
  %458 = fmul double %457, %64
  br i1 %456, label %459, label %460

459:                                              ; preds = %454
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %.0275, i32 noundef %.1271, i32 noundef %.3286, double noundef %.1257, double noundef %.0269, double noundef %458)
  br label %461

460:                                              ; preds = %454
  tail call void @_ZN4voro23container_periodic_base9put_imageEiiiddd(ptr noundef nonnull align 8 dereferenceable(384) %0, i32 noundef %12, i32 noundef %.1271, i32 noundef %.3286, double noundef %.1259, double noundef %.0269, double noundef %458)
  br label %461

461:                                              ; preds = %452, %450, %460, %459, %443
  %462 = add nuw nsw i32 %.3286, 1
  %463 = load ptr, ptr %423, align 8, !tbaa !31
  %464 = getelementptr inbounds i32, ptr %463, i64 %424
  %465 = load i32, ptr %464, align 4, !tbaa !32
  %466 = icmp slt i32 %462, %465
  br i1 %466, label %432, label %.loopexit, !llvm.loop !44

.loopexit:                                        ; preds = %461, %422, %.loopexit278
  %467 = load ptr, ptr %103, align 8, !tbaa !29
  %468 = getelementptr inbounds i8, ptr %467, i64 %105
  store i8 15, ptr %468, align 1, !tbaa !30
  ret void
}

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

!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 = !{!"_ZTSN4voro9voro_baseE", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !11, i64 72}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!13, !7, i64 320}
!13 = !{!"_ZTSN4voro23container_periodic_baseE", !14, i64 0, !6, i64 224, !7, i64 304, !7, i64 308, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !7, i64 328, !11, i64 336, !11, i64 344, !11, i64 352, !11, i64 360, !11, i64 368, !7, i64 376, !7, i64 380}
!14 = !{!"_ZTSN4voro8unitcellE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !15, i64 48, !10, i64 208, !10, i64 216}
!15 = !{!"_ZTSN4voro11voronoicellE", !16, i64 0}
!16 = !{!"_ZTSN4voro16voronoicell_baseE", !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !7, i64 112, !7, i64 116, !11, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152}
!17 = !{!13, !7, i64 308}
!18 = !{!6, !7, i64 8}
!19 = !{!14, !10, i64 32}
!20 = !{!6, !10, i64 56}
!21 = !{!13, !7, i64 304}
!22 = !{!6, !7, i64 4}
!23 = !{!14, !10, i64 24}
!24 = !{!14, !10, i64 8}
!25 = !{!6, !10, i64 48}
!26 = !{!14, !10, i64 16}
!27 = !{!6, !10, i64 32}
!28 = !{!6, !10, i64 24}
!29 = !{!13, !11, i64 368}
!30 = !{!8, !8, i64 0}
!31 = !{!13, !11, i64 352}
!32 = !{!7, !7, i64 0}
!33 = !{!13, !11, i64 344}
!34 = !{!11, !11, i64 0}
!35 = !{!13, !7, i64 380}
!36 = !{!10, !10, i64 0}
!37 = !{!14, !10, i64 40}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = !{!14, !10, i64 0}
!41 = distinct !{!41, !39}
!42 = !{!13, !7, i64 312}
!43 = distinct !{!43, !39}
!44 = distinct !{!44, !39}


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