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

; 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::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 }
%"class.voro::voro_base" = type { i32, i32, i32, i32, i32, double, double, double, double, double, double, ptr }

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4voro23container_periodic_baseC2Eddddddiiiii(ptr noundef nonnull align 8 dereferenceable(384) %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, double noundef %5, double noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %13 = alloca ptr, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  store ptr %0, ptr %13, align 8, !tbaa !5
  store double %1, ptr %14, align 8, !tbaa !9
  store double %2, ptr %15, align 8, !tbaa !9
  store double %3, ptr %16, align 8, !tbaa !9
  store double %4, ptr %17, align 8, !tbaa !9
  store double %5, ptr %18, align 8, !tbaa !9
  store double %6, ptr %19, align 8, !tbaa !9
  store i32 %7, ptr %20, align 4, !tbaa !11
  store i32 %8, ptr %21, align 4, !tbaa !11
  store i32 %9, ptr %22, align 4, !tbaa !11
  store i32 %10, ptr %23, align 4, !tbaa !11
  store i32 %11, ptr %24, align 4, !tbaa !11
  %33 = load ptr, ptr %13, align 8
  %34 = load double, ptr %14, align 8, !tbaa !9
  %35 = load double, ptr %15, align 8, !tbaa !9
  %36 = load double, ptr %16, align 8, !tbaa !9
  %37 = load double, ptr %17, align 8, !tbaa !9
  %38 = load double, ptr %18, align 8, !tbaa !9
  %39 = load double, ptr %19, align 8, !tbaa !9
  call void @_ZN4voro8unitcellC2Edddddd(ptr noundef nonnull align 8 dereferenceable(224) %33, double noundef %34, double noundef %35, double noundef %36, double noundef %37, double noundef %38, double noundef %39)
  %40 = getelementptr inbounds i8, ptr %33, i64 224
  %41 = load i32, ptr %20, align 4, !tbaa !11
  %42 = load i32, ptr %21, align 4, !tbaa !11
  %43 = load i32, ptr %22, align 4, !tbaa !11
  %44 = load double, ptr %14, align 8, !tbaa !9
  %45 = load i32, ptr %20, align 4, !tbaa !11
  %46 = sitofp i32 %45 to double
  %47 = fdiv double %44, %46
  %48 = load double, ptr %16, align 8, !tbaa !9
  %49 = load i32, ptr %21, align 4, !tbaa !11
  %50 = sitofp i32 %49 to double
  %51 = fdiv double %48, %50
  %52 = load double, ptr %19, align 8, !tbaa !9
  %53 = load i32, ptr %22, align 4, !tbaa !11
  %54 = sitofp i32 %53 to double
  %55 = fdiv double %52, %54
  invoke void @_ZN4voro9voro_baseC2Eiiiddd(ptr noundef nonnull align 8 dereferenceable(80) %40, i32 noundef %41, i32 noundef %42, i32 noundef %43, double noundef %47, double noundef %51, double noundef %55)
          to label %56 unwind label %177

56:                                               ; preds = %12
  %57 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 2
  %58 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 7
  %59 = load double, ptr %58, align 8, !tbaa !13
  %60 = getelementptr inbounds i8, ptr %33, i64 224
  %61 = getelementptr inbounds %"class.voro::voro_base", ptr %60, i32 0, i32 9
  %62 = load double, ptr %61, align 8, !tbaa !17
  %63 = call double @llvm.fmuladd.f64(double %59, double %62, double 1.000000e+00)
  %64 = fptosi double %63 to i32
  store i32 %64, ptr %57, align 8, !tbaa !19
  %65 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 3
  %66 = getelementptr inbounds %"class.voro::unitcell", ptr %33, i32 0, i32 8
  %67 = load double, ptr %66, align 8, !tbaa !21
  %68 = getelementptr inbounds i8, ptr %33, i64 224
  %69 = getelementptr inbounds %"class.voro::voro_base", ptr %68, i32 0, i32 10
  %70 = load double, ptr %69, align 8, !tbaa !22
  %71 = call double @llvm.fmuladd.f64(double %67, double %70, double 1.000000e+00)
  %72 = fptosi double %71 to i32
  store i32 %72, ptr %65, align 4, !tbaa !23
  %73 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 4
  %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 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 2
  %78 = load i32, ptr %77, align 8, !tbaa !19
  %79 = add nsw i32 %76, %78
  store i32 %79, ptr %73, align 8, !tbaa !25
  %80 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 5
  %81 = getelementptr inbounds i8, ptr %33, i64 224
  %82 = getelementptr inbounds %"class.voro::voro_base", ptr %81, i32 0, i32 2
  %83 = load i32, ptr %82, align 8, !tbaa !26
  %84 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 3
  %85 = load i32, ptr %84, align 4, !tbaa !23
  %86 = add nsw i32 %83, %85
  store i32 %86, ptr %80, align 4, !tbaa !27
  %87 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 6
  %88 = getelementptr inbounds i8, ptr %33, i64 224
  %89 = getelementptr inbounds %"class.voro::voro_base", ptr %88, i32 0, i32 1
  %90 = load i32, ptr %89, align 4, !tbaa !24
  %91 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 2
  %92 = load i32, ptr %91, align 8, !tbaa !19
  %93 = mul nsw i32 2, %92
  %94 = add nsw i32 %90, %93
  store i32 %94, ptr %87, align 8, !tbaa !28
  %95 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 7
  %96 = getelementptr inbounds i8, ptr %33, i64 224
  %97 = getelementptr inbounds %"class.voro::voro_base", ptr %96, i32 0, i32 2
  %98 = load i32, ptr %97, align 8, !tbaa !26
  %99 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 3
  %100 = load i32, ptr %99, align 4, !tbaa !23
  %101 = mul nsw i32 2, %100
  %102 = add nsw i32 %98, %101
  store i32 %102, ptr %95, align 4, !tbaa !29
  %103 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %104 = getelementptr inbounds i8, ptr %33, i64 224
  %105 = getelementptr inbounds %"class.voro::voro_base", ptr %104, i32 0, i32 0
  %106 = load i32, ptr %105, align 8, !tbaa !30
  %107 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 6
  %108 = load i32, ptr %107, align 8, !tbaa !28
  %109 = mul nsw i32 %106, %108
  %110 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 7
  %111 = load i32, ptr %110, align 4, !tbaa !29
  %112 = mul nsw i32 %109, %111
  store i32 %112, ptr %103, align 8, !tbaa !31
  %113 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 9
  %114 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %115 = load i32, ptr %114, align 8, !tbaa !31
  %116 = sext i32 %115 to i64
  %117 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %116, i64 8)
  %118 = extractvalue { i64, i1 } %117, 1
  %119 = extractvalue { i64, i1 } %117, 0
  %120 = select i1 %118, i64 -1, i64 %119
  %121 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %120) #7
          to label %122 unwind label %181

122:                                              ; preds = %56
  store ptr %121, ptr %113, align 8, !tbaa !32
  %123 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %124 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %125 = load i32, ptr %124, align 8, !tbaa !31
  %126 = sext i32 %125 to i64
  %127 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %126, i64 8)
  %128 = extractvalue { i64, i1 } %127, 1
  %129 = extractvalue { i64, i1 } %127, 0
  %130 = select i1 %128, i64 -1, i64 %129
  %131 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %130) #7
          to label %132 unwind label %181

132:                                              ; preds = %122
  store ptr %131, ptr %123, align 8, !tbaa !33
  %133 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 11
  %134 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %135 = load i32, ptr %134, align 8, !tbaa !31
  %136 = sext i32 %135 to i64
  %137 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %136, i64 4)
  %138 = extractvalue { i64, i1 } %137, 1
  %139 = extractvalue { i64, i1 } %137, 0
  %140 = select i1 %138, i64 -1, i64 %139
  %141 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %140) #7
          to label %142 unwind label %181

142:                                              ; preds = %132
  store ptr %141, ptr %133, align 8, !tbaa !34
  %143 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 12
  %144 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %145 = load i32, ptr %144, align 8, !tbaa !31
  %146 = sext i32 %145 to i64
  %147 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %146, i64 4)
  %148 = extractvalue { i64, i1 } %147, 1
  %149 = extractvalue { i64, i1 } %147, 0
  %150 = select i1 %148, i64 -1, i64 %149
  %151 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %150) #7
          to label %152 unwind label %181

152:                                              ; preds = %142
  store ptr %151, ptr %143, align 8, !tbaa !35
  %153 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %154 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %155 = load i32, ptr %154, align 8, !tbaa !31
  %156 = sext i32 %155 to i64
  %157 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %156) #7
          to label %158 unwind label %181

158:                                              ; preds = %152
  store ptr %157, ptr %153, align 8, !tbaa !36
  %159 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 14
  %160 = load i32, ptr %23, align 4, !tbaa !11
  store i32 %160, ptr %159, align 8, !tbaa !37
  %161 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %162 = load i32, ptr %24, align 4, !tbaa !11
  store i32 %162, ptr %161, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %163 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 11
  %164 = load ptr, ptr %163, align 8, !tbaa !34
  store ptr %164, ptr %31, align 8, !tbaa !5
  br label %165

165:                                              ; preds = %174, %158
  %166 = load ptr, ptr %31, align 8, !tbaa !5
  %167 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 11
  %168 = load ptr, ptr %167, align 8, !tbaa !34
  %169 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %170 = load i32, ptr %169, align 8, !tbaa !31
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds i32, ptr %168, i64 %171
  %173 = icmp ult ptr %166, %172
  br i1 %173, label %174, label %185

174:                                              ; preds = %165
  %175 = load ptr, ptr %31, align 8, !tbaa !5
  %176 = getelementptr inbounds i32, ptr %175, i32 1
  store ptr %176, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %175, align 4, !tbaa !11
  br label %165, !llvm.loop !39

177:                                              ; preds = %12
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %25, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %26, align 4
  br label %307

181:                                              ; preds = %152, %142, %132, %122, %56
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %25, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %26, align 4
  br label %305

185:                                              ; preds = %165
  %186 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 12
  %187 = load ptr, ptr %186, align 8, !tbaa !35
  store ptr %187, ptr %31, align 8, !tbaa !5
  br label %188

188:                                              ; preds = %197, %185
  %189 = load ptr, ptr %31, align 8, !tbaa !5
  %190 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 12
  %191 = load ptr, ptr %190, align 8, !tbaa !35
  %192 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %193 = load i32, ptr %192, align 8, !tbaa !31
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds i32, ptr %191, i64 %194
  %196 = icmp ult ptr %189, %195
  br i1 %196, label %197, label %200

197:                                              ; preds = %188
  %198 = load ptr, ptr %31, align 8, !tbaa !5
  %199 = getelementptr inbounds i32, ptr %198, i32 1
  store ptr %199, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %198, align 4, !tbaa !11
  br label %188, !llvm.loop !41

200:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %201 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %202 = load ptr, ptr %201, align 8, !tbaa !36
  store ptr %202, ptr %32, align 8, !tbaa !5
  br label %203

203:                                              ; preds = %212, %200
  %204 = load ptr, ptr %32, align 8, !tbaa !5
  %205 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 13
  %206 = load ptr, ptr %205, align 8, !tbaa !36
  %207 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 8
  %208 = load i32, ptr %207, align 8, !tbaa !31
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i8, ptr %206, i64 %209
  %211 = icmp ult ptr %204, %210
  br i1 %211, label %212, label %215

212:                                              ; preds = %203
  %213 = load ptr, ptr %32, align 8, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %213, i32 1
  store ptr %214, ptr %32, align 8, !tbaa !5
  store i8 0, ptr %213, align 1, !tbaa !42
  br label %203, !llvm.loop !43

215:                                              ; preds = %203
  %216 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 3
  %217 = load i32, ptr %216, align 4, !tbaa !23
  store i32 %217, ptr %29, align 4, !tbaa !11
  br label %218

218:                                              ; preds = %301, %215
  %219 = load i32, ptr %29, align 4, !tbaa !11
  %220 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 5
  %221 = load i32, ptr %220, align 4, !tbaa !27
  %222 = icmp slt i32 %219, %221
  br i1 %222, label %223, label %304

223:                                              ; preds = %218
  %224 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 2
  %225 = load i32, ptr %224, align 8, !tbaa !19
  store i32 %225, ptr %28, align 4, !tbaa !11
  br label %226

226:                                              ; preds = %297, %223
  %227 = load i32, ptr %28, align 4, !tbaa !11
  %228 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 4
  %229 = load i32, ptr %228, align 8, !tbaa !25
  %230 = icmp slt i32 %227, %229
  br i1 %230, label %231, label %300

231:                                              ; preds = %226
  store i32 0, ptr %27, align 4, !tbaa !11
  br label %232

232:                                              ; preds = %289, %231
  %233 = load i32, ptr %27, align 4, !tbaa !11
  %234 = getelementptr inbounds i8, ptr %33, i64 224
  %235 = getelementptr inbounds %"class.voro::voro_base", ptr %234, i32 0, i32 0
  %236 = load i32, ptr %235, align 8, !tbaa !30
  %237 = icmp slt i32 %233, %236
  br i1 %237, label %238, label %296

238:                                              ; preds = %232
  %239 = load i32, ptr %27, align 4, !tbaa !11
  %240 = getelementptr inbounds i8, ptr %33, i64 224
  %241 = getelementptr inbounds %"class.voro::voro_base", ptr %240, i32 0, i32 0
  %242 = load i32, ptr %241, align 8, !tbaa !30
  %243 = load i32, ptr %28, align 4, !tbaa !11
  %244 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 6
  %245 = load i32, ptr %244, align 8, !tbaa !28
  %246 = load i32, ptr %29, align 4, !tbaa !11
  %247 = mul nsw i32 %245, %246
  %248 = add nsw i32 %243, %247
  %249 = mul nsw i32 %242, %248
  %250 = add nsw i32 %239, %249
  store i32 %250, ptr %30, align 4, !tbaa !11
  %251 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 14
  %252 = load i32, ptr %251, align 8, !tbaa !37
  %253 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 12
  %254 = load ptr, ptr %253, align 8, !tbaa !35
  %255 = load i32, ptr %30, align 4, !tbaa !11
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds i32, ptr %254, i64 %256
  store i32 %252, ptr %257, align 4, !tbaa !11
  %258 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 14
  %259 = load i32, ptr %258, align 8, !tbaa !37
  %260 = sext i32 %259 to i64
  %261 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %260, i64 4)
  %262 = extractvalue { i64, i1 } %261, 1
  %263 = extractvalue { i64, i1 } %261, 0
  %264 = select i1 %262, i64 -1, i64 %263
  %265 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %264) #7
          to label %266 unwind label %292

266:                                              ; preds = %238
  %267 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 9
  %268 = load ptr, ptr %267, align 8, !tbaa !32
  %269 = load i32, ptr %30, align 4, !tbaa !11
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds ptr, ptr %268, i64 %270
  store ptr %265, ptr %271, align 8, !tbaa !5
  %272 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 15
  %273 = load i32, ptr %272, align 4, !tbaa !38
  %274 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 14
  %275 = load i32, ptr %274, align 8, !tbaa !37
  %276 = mul nsw i32 %273, %275
  %277 = sext i32 %276 to i64
  %278 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %277, i64 8)
  %279 = extractvalue { i64, i1 } %278, 1
  %280 = extractvalue { i64, i1 } %278, 0
  %281 = select i1 %279, i64 -1, i64 %280
  %282 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %281) #7
          to label %283 unwind label %292

283:                                              ; preds = %266
  %284 = getelementptr inbounds %"class.voro::container_periodic_base", ptr %33, i32 0, i32 10
  %285 = load ptr, ptr %284, align 8, !tbaa !33
  %286 = load i32, ptr %30, align 4, !tbaa !11
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds ptr, ptr %285, i64 %287
  store ptr %282, ptr %288, align 8, !tbaa !5
  br label %289

289:                                              ; preds = %283
  %290 = load i32, ptr %27, align 4, !tbaa !11
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %27, align 4, !tbaa !11
  br label %232, !llvm.loop !44

292:                                              ; preds = %266, %238
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %25, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %305

296:                                              ; preds = %232
  br label %297

297:                                              ; preds = %296
  %298 = load i32, ptr %28, align 4, !tbaa !11
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %28, align 4, !tbaa !11
  br label %226, !llvm.loop !45

300:                                              ; preds = %226
  br label %301

301:                                              ; preds = %300
  %302 = load i32, ptr %29, align 4, !tbaa !11
  %303 = add nsw i32 %302, 1
  store i32 %303, ptr %29, align 4, !tbaa !11
  br label %218, !llvm.loop !46

304:                                              ; preds = %218
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  ret void

305:                                              ; preds = %292, %181
  %306 = getelementptr inbounds i8, ptr %33, i64 224
  call void @_ZN4voro9voro_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %306) #8
  br label %307

307:                                              ; preds = %305, %177
  call void @_ZN4voro8unitcellD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %33) #8
  br label %308

308:                                              ; preds = %307
  %309 = load ptr, ptr %25, align 8
  %310 = load i32, ptr %26, align 4
  %311 = insertvalue { ptr, i32 } poison, ptr %309, 0
  %312 = insertvalue { ptr, i32 } %311, i32 %310, 1
  resume { ptr, i32 } %312
}

declare void @_ZN4voro8unitcellC2Edddddd(ptr noundef nonnull align 8 dereferenceable(224), double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) unnamed_addr #1

declare void @_ZN4voro9voro_baseC2Eiiiddd(ptr noundef nonnull align 8 dereferenceable(80), i32 noundef, i32 noundef, i32 noundef, double noundef, double noundef, double noundef) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4voro9voro_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN4voro8unitcellD2Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #6 align 2

attributes #0 = { 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 #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nobuiltin allocsize(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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { 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 #7 = { builtin allocsize(0) }
attributes #8 = { 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 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !10, i64 208}
!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", !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, 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, !12, i64 112, !12, i64 116, !6, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152}
!17 = !{!18, !10, i64 56}
!18 = !{!"_ZTSN4voro9voro_baseE", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !6, i64 72}
!19 = !{!20, !12, i64 304}
!20 = !{!"_ZTSN4voro23container_periodic_baseE", !14, i64 0, !18, i64 224, !12, i64 304, !12, i64 308, !12, i64 312, !12, i64 316, !12, i64 320, !12, i64 324, !12, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368, !12, i64 376, !12, i64 380}
!21 = !{!14, !10, i64 216}
!22 = !{!18, !10, i64 64}
!23 = !{!20, !12, i64 308}
!24 = !{!18, !12, i64 4}
!25 = !{!20, !12, i64 312}
!26 = !{!18, !12, i64 8}
!27 = !{!20, !12, i64 316}
!28 = !{!20, !12, i64 320}
!29 = !{!20, !12, i64 324}
!30 = !{!18, !12, i64 0}
!31 = !{!20, !12, i64 328}
!32 = !{!20, !6, i64 336}
!33 = !{!20, !6, i64 344}
!34 = !{!20, !6, i64 352}
!35 = !{!20, !6, i64 360}
!36 = !{!20, !6, i64 368}
!37 = !{!20, !12, i64 376}
!38 = !{!20, !12, i64 380}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = distinct !{!41, !40}
!42 = !{!7, !7, i64 0}
!43 = distinct !{!43, !40}
!44 = distinct !{!44, !40}
!45 = distinct !{!45, !40}
!46 = distinct !{!46, !40}


; 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 uwtable
define dso_local void @_ZN4voro23container_periodic_baseC2Eddddddiiiii(ptr noundef nonnull align 8 dereferenceable(384) %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, double noundef %5, double noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  tail call void @_ZN4voro8unitcellC2Edddddd(ptr noundef nonnull align 8 dereferenceable(224) %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, double noundef %5, double noundef %6)
  %13 = getelementptr inbounds i8, ptr %0, i64 224
  %14 = sitofp i32 %7 to double
  %15 = fdiv double %1, %14
  %16 = sitofp i32 %8 to double
  %17 = fdiv double %3, %16
  %18 = sitofp i32 %9 to double
  %19 = fdiv double %6, %18
  invoke void @_ZN4voro9voro_baseC2Eiiiddd(ptr noundef nonnull align 8 dereferenceable(80) %13, i32 noundef %7, i32 noundef %8, i32 noundef %9, double noundef %15, double noundef %17, double noundef %19)
          to label %20 unwind label %68

20:                                               ; preds = %12
  %21 = getelementptr inbounds i8, ptr %0, i64 304
  %22 = getelementptr inbounds i8, ptr %0, i64 208
  %23 = getelementptr inbounds i8, ptr %0, i64 280
  %24 = getelementptr inbounds i8, ptr %0, i64 312
  %25 = getelementptr inbounds i8, ptr %0, i64 228
  %26 = getelementptr inbounds i8, ptr %0, i64 316
  %27 = load <2 x double>, ptr %22, align 8, !tbaa !5
  %28 = load <2 x double>, ptr %23, align 8, !tbaa !5
  %29 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %27, <2 x double> %28, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %30 = fptosi <2 x double> %29 to <2 x i32>
  store <2 x i32> %30, ptr %21, align 8, !tbaa !9
  %31 = load <2 x i32>, ptr %25, align 4, !tbaa !9
  %32 = add nsw <2 x i32> %31, %30
  store <2 x i32> %32, ptr %24, align 8, !tbaa !9
  %33 = getelementptr inbounds i8, ptr %0, i64 320
  %34 = shl nsw <2 x i32> %30, <i32 1, i32 1>
  %35 = add nsw <2 x i32> %31, %34
  store <2 x i32> %35, ptr %33, align 8, !tbaa !9
  %36 = getelementptr inbounds i8, ptr %0, i64 328
  %37 = load i32, ptr %13, align 8, !tbaa !11
  %38 = extractelement <2 x i32> %35, i64 0
  %39 = extractelement <2 x i32> %35, i64 1
  %40 = mul i32 %39, %38
  %41 = mul i32 %40, %37
  store i32 %41, ptr %36, align 8, !tbaa !14
  %42 = getelementptr inbounds i8, ptr %0, i64 336
  %43 = sext i32 %41 to i64
  %44 = icmp slt i32 %41, 0
  %45 = shl nsw i64 %43, 3
  %46 = select i1 %44, i64 -1, i64 %45
  %47 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %46) #7
          to label %48 unwind label %70

48:                                               ; preds = %20
  store ptr %47, ptr %42, align 8, !tbaa !19
  %49 = getelementptr inbounds i8, ptr %0, i64 344
  %50 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %46) #7
          to label %51 unwind label %70

51:                                               ; preds = %48
  store ptr %50, ptr %49, align 8, !tbaa !20
  %52 = shl nsw i64 %43, 2
  %53 = select i1 %44, i64 -1, i64 %52
  %54 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %53) #7
          to label %55 unwind label %70

55:                                               ; preds = %51
  %56 = ptrtoint ptr %54 to i64
  %57 = getelementptr inbounds i8, ptr %0, i64 352
  store ptr %54, ptr %57, align 8, !tbaa !21
  %58 = getelementptr inbounds i8, ptr %0, i64 360
  %59 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %53) #7
          to label %60 unwind label %70

60:                                               ; preds = %55
  %61 = ptrtoint ptr %59 to i64
  store ptr %59, ptr %58, align 8, !tbaa !22
  %62 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %43) #7
          to label %63 unwind label %70

63:                                               ; preds = %60
  %64 = getelementptr inbounds i8, ptr %0, i64 368
  store ptr %62, ptr %64, align 8, !tbaa !23
  %65 = getelementptr inbounds i8, ptr %0, i64 376
  store i32 %10, ptr %65, align 8, !tbaa !24
  %66 = getelementptr inbounds i8, ptr %0, i64 380
  store i32 %11, ptr %66, align 4, !tbaa !25
  %67 = icmp sgt i32 %41, 0
  br i1 %67, label %.lr.ph55.preheader, label %.preheader48

68:                                               ; preds = %12
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %154

70:                                               ; preds = %60, %55, %51, %48, %20
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %153

.lr.ph55.preheader:                               ; preds = %63
  %72 = ptrtoint ptr %62 to i64
  %73 = add i64 %52, %56
  %74 = add i64 %56, 4
  %umax = tail call i64 @llvm.umax.i64(i64 %73, i64 %74)
  %75 = xor i64 %56, -1
  %76 = add i64 %umax, %75
  %77 = and i64 %76, -4
  %78 = add i64 %77, 4
  tail call void @llvm.memset.p0.i64(ptr nonnull align 4 %54, i8 0, i64 %78, i1 false), !tbaa !9
  %79 = add i64 %52, %61
  %80 = add i64 %61, 4
  %umax66 = tail call i64 @llvm.umax.i64(i64 %79, i64 %80)
  %81 = xor i64 %61, -1
  %82 = add i64 %umax66, %81
  %83 = and i64 %82, -4
  %84 = add i64 %83, 4
  tail call void @llvm.memset.p0.i64(ptr nonnull align 4 %59, i8 0, i64 %84, i1 false), !tbaa !9
  %85 = add i64 %72, %43
  %86 = add i64 %72, 1
  %umax67 = tail call i64 @llvm.umax.i64(i64 %85, i64 %86)
  %87 = sub i64 %umax67, %72
  tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %62, i8 0, i64 %87, i1 false), !tbaa !26
  br label %.preheader48

.preheader48:                                     ; preds = %63, %.lr.ph55.preheader
  %88 = icmp sgt <2 x i32> %31, zeroinitializer
  %shift = shufflevector <2 x i1> %88, <2 x i1> poison, <2 x i32> <i32 1, i32 poison>
  %89 = and <2 x i1> %88, %shift
  %or.cond = extractelement <2 x i1> %89, i64 0
  br i1 %or.cond, label %.lr.ph62.split.preheader, label %._crit_edge63

.lr.ph62.split.preheader:                         ; preds = %.preheader48
  %90 = extractelement <2 x i32> %30, i64 1
  %91 = extractelement <2 x i32> %32, i64 1
  %92 = extractelement <2 x i32> %32, i64 0
  br label %.lr.ph62.split

.lr.ph62.split:                                   ; preds = %.lr.ph62.split.preheader, %._crit_edge59
  %93 = phi i32 [ %145, %._crit_edge59 ], [ %91, %.lr.ph62.split.preheader ]
  %94 = phi i32 [ %146, %._crit_edge59 ], [ %92, %.lr.ph62.split.preheader ]
  %95 = phi i32 [ %147, %._crit_edge59 ], [ %10, %.lr.ph62.split.preheader ]
  %96 = phi i32 [ %148, %._crit_edge59 ], [ %37, %.lr.ph62.split.preheader ]
  %97 = phi i32 [ %149, %._crit_edge59 ], [ %37, %.lr.ph62.split.preheader ]
  %98 = phi i32 [ %150, %._crit_edge59 ], [ %92, %.lr.ph62.split.preheader ]
  %.04060 = phi i32 [ %151, %._crit_edge59 ], [ %90, %.lr.ph62.split.preheader ]
  %99 = load i32, ptr %21, align 8, !tbaa !27
  %100 = icmp slt i32 %99, %98
  %101 = icmp sgt i32 %97, 0
  %or.cond73 = select i1 %100, i1 %101, i1 false
  br i1 %or.cond73, label %.preheader, label %._crit_edge59

.preheader:                                       ; preds = %.lr.ph62.split, %._crit_edge
  %102 = phi i32 [ %140, %._crit_edge ], [ %94, %.lr.ph62.split ]
  %103 = phi i32 [ %141, %._crit_edge ], [ %95, %.lr.ph62.split ]
  %104 = phi i32 [ %142, %._crit_edge ], [ %96, %.lr.ph62.split ]
  %.04158 = phi i32 [ %143, %._crit_edge ], [ %99, %.lr.ph62.split ]
  %105 = icmp sgt i32 %104, 0
  br i1 %105, label %.lr.ph57, label %._crit_edge

.lr.ph57:                                         ; preds = %.preheader, %132
  %106 = phi i32 [ %116, %132 ], [ %103, %.preheader ]
  %107 = phi i32 [ %136, %132 ], [ %104, %.preheader ]
  %.04256 = phi i32 [ %135, %132 ], [ 0, %.preheader ]
  %108 = load i32, ptr %33, align 8, !tbaa !28
  %109 = mul nsw i32 %108, %.04060
  %110 = add nsw i32 %109, %.04158
  %111 = mul nsw i32 %110, %107
  %112 = add nsw i32 %111, %.04256
  %113 = load ptr, ptr %58, align 8, !tbaa !22
  %114 = sext i32 %112 to i64
  %115 = getelementptr inbounds i32, ptr %113, i64 %114
  store i32 %106, ptr %115, align 4, !tbaa !9
  %116 = load i32, ptr %65, align 8, !tbaa !24
  %117 = sext i32 %116 to i64
  %118 = icmp slt i32 %116, 0
  %119 = shl nsw i64 %117, 2
  %120 = select i1 %118, i64 -1, i64 %119
  %121 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %120) #7
          to label %122 unwind label %138

122:                                              ; preds = %.lr.ph57
  %123 = load ptr, ptr %42, align 8, !tbaa !19
  %124 = getelementptr inbounds ptr, ptr %123, i64 %114
  store ptr %121, ptr %124, align 8, !tbaa !29
  %125 = load i32, ptr %66, align 4, !tbaa !25
  %126 = mul nsw i32 %125, %116
  %127 = sext i32 %126 to i64
  %128 = icmp slt i32 %126, 0
  %129 = shl nsw i64 %127, 3
  %130 = select i1 %128, i64 -1, i64 %129
  %131 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %130) #7
          to label %132 unwind label %138

132:                                              ; preds = %122
  %133 = load ptr, ptr %49, align 8, !tbaa !20
  %134 = getelementptr inbounds ptr, ptr %133, i64 %114
  store ptr %131, ptr %134, align 8, !tbaa !29
  %135 = add nuw nsw i32 %.04256, 1
  %136 = load i32, ptr %13, align 8, !tbaa !11
  %137 = icmp slt i32 %135, %136
  br i1 %137, label %.lr.ph57, label %._crit_edge.loopexit, !llvm.loop !30

138:                                              ; preds = %122, %.lr.ph57
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %153

._crit_edge.loopexit:                             ; preds = %132
  %.pre = load i32, ptr %24, align 8, !tbaa !32
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader
  %140 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %102, %.preheader ]
  %141 = phi i32 [ %116, %._crit_edge.loopexit ], [ %103, %.preheader ]
  %142 = phi i32 [ %136, %._crit_edge.loopexit ], [ %104, %.preheader ]
  %143 = add nsw i32 %.04158, 1
  %144 = icmp slt i32 %143, %140
  br i1 %144, label %.preheader, label %._crit_edge59.loopexit, !llvm.loop !33

._crit_edge59.loopexit:                           ; preds = %._crit_edge
  %.pre68 = load i32, ptr %26, align 4, !tbaa !35
  br label %._crit_edge59

._crit_edge59:                                    ; preds = %._crit_edge59.loopexit, %.lr.ph62.split
  %145 = phi i32 [ %.pre68, %._crit_edge59.loopexit ], [ %93, %.lr.ph62.split ]
  %146 = phi i32 [ %140, %._crit_edge59.loopexit ], [ %94, %.lr.ph62.split ]
  %147 = phi i32 [ %141, %._crit_edge59.loopexit ], [ %95, %.lr.ph62.split ]
  %148 = phi i32 [ %142, %._crit_edge59.loopexit ], [ %96, %.lr.ph62.split ]
  %149 = phi i32 [ %142, %._crit_edge59.loopexit ], [ %97, %.lr.ph62.split ]
  %150 = phi i32 [ %140, %._crit_edge59.loopexit ], [ %98, %.lr.ph62.split ]
  %151 = add nsw i32 %.04060, 1
  %152 = icmp slt i32 %151, %145
  br i1 %152, label %.lr.ph62.split, label %._crit_edge63, !llvm.loop !36

._crit_edge63:                                    ; preds = %._crit_edge59, %.preheader48
  ret void

153:                                              ; preds = %138, %70
  %.pn = phi { ptr, i32 } [ %139, %138 ], [ %71, %70 ]
  tail call void @_ZN4voro9voro_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %13) #8
  br label %154

154:                                              ; preds = %153, %68
  %.pn.pn = phi { ptr, i32 } [ %.pn, %153 ], [ %69, %68 ]
  tail call void @_ZN4voro8unitcellD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %0) #8
  resume { ptr, i32 } %.pn.pn
}

declare void @_ZN4voro8unitcellC2Edddddd(ptr noundef nonnull align 8 dereferenceable(224), double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) unnamed_addr #1

declare void @_ZN4voro9voro_baseC2Eiiiddd(ptr noundef nonnull align 8 dereferenceable(80), i32 noundef, i32 noundef, i32 noundef, double noundef, double noundef, double noundef) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4voro9voro_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN4voro8unitcellD2Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #4 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #5

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

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

attributes #0 = { 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 #1 = { "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 = { nobuiltin allocsize(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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { builtin allocsize(0) }
attributes #8 = { 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 = !{!"double", !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, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !13, i64 72}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!15, !10, i64 328}
!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, !13, i64 336, !13, i64 344, !13, i64 352, !13, i64 360, !13, i64 368, !10, i64 376, !10, i64 380}
!16 = !{!"_ZTSN4voro8unitcellE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !17, i64 48, !6, i64 208, !6, 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, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !10, i64 112, !10, i64 116, !13, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152}
!19 = !{!15, !13, i64 336}
!20 = !{!15, !13, i64 344}
!21 = !{!15, !13, i64 352}
!22 = !{!15, !13, i64 360}
!23 = !{!15, !13, i64 368}
!24 = !{!15, !10, i64 376}
!25 = !{!15, !10, i64 380}
!26 = !{!7, !7, i64 0}
!27 = !{!15, !10, i64 304}
!28 = !{!15, !10, i64 320}
!29 = !{!13, !13, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!15, !10, i64 312}
!33 = distinct !{!33, !31, !34}
!34 = !{!"llvm.loop.unswitch.partial.disable"}
!35 = !{!15, !10, i64 316}
!36 = distinct !{!36, !31, !34}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass