; LLVM IR from ETH3D/dataset-pipeline :: thirdparty/cork/cork/isct (triangle)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.mesh = type { %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, [4096 x ptr], [4096 x ptr], [4096 x i32], i32, ptr, double, double, double, double, double, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.otri }
%struct.memorypool = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i64, i64, i32, i32 }
%struct.otri = type { ptr, i32 }
%struct.behavior = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8] }
%struct.timeval = type { i64, i64 }
%struct.timezone = type { i32, i32 }

@.str.225 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1143 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1144 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1145 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1146 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1147 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1148 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1149 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1150 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1151 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1152 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1153 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: nounwind uwtable
declare dso_local void @trifree(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @parsecommandline(i32 noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @triangledeinit(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @triangleinit(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @checkmesh(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @checkdelaunay(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i64 @delaunay(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i64 @reconstruct(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @formskeleton(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @carveholes(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @enforcequality(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @highorder(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @readnodes(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @readholes(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @writenodes(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @numbernodes(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @writeelements(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @writepoly(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @writeedges(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @writevoronoi(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @writeneighbors(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @writeoff(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @statistics(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #2 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %struct.mesh, align 8
  %7 = alloca %struct.behavior, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %struct.timeval, align 8
  %12 = alloca %struct.timeval, align 8
  %13 = alloca %struct.timeval, align 8
  %14 = alloca %struct.timeval, align 8
  %15 = alloca %struct.timeval, align 8
  %16 = alloca %struct.timeval, align 8
  %17 = alloca %struct.timeval, align 8
  %18 = alloca %struct.timezone, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 82904, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 24744, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %19 = call i32 @gettimeofday(ptr noundef %11, ptr noundef %18) #4
  call void @triangleinit(ptr noundef %6)
  %20 = load i32, ptr %4, align 4, !tbaa !5
  %21 = load ptr, ptr %5, align 8, !tbaa !9
  call void @parsecommandline(i32 noundef %20, ptr noundef %21, ptr noundef %7)
  %22 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 33
  %23 = load i32, ptr %22, align 4, !tbaa !11
  %24 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 29
  store i32 %23, ptr %24, align 8, !tbaa !14
  %25 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 38
  %26 = getelementptr inbounds [2048 x i8], ptr %25, i64 0, i64 0
  %27 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 40
  %28 = getelementptr inbounds [2048 x i8], ptr %27, i64 0, i64 0
  call void @readnodes(ptr noundef %6, ptr noundef %7, ptr noundef %26, ptr noundef %28, ptr noundef %10)
  %29 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %30 = load i32, ptr %29, align 8, !tbaa !19
  %31 = icmp ne i32 %30, 0
  br i1 %31, label %34, label %32

32:                                               ; preds = %2
  %33 = call i32 @gettimeofday(ptr noundef %12, ptr noundef %18) #4
  br label %34

34:                                               ; preds = %32, %2
  %35 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 1
  %36 = load i32, ptr %35, align 4, !tbaa !20
  %37 = icmp ne i32 %36, 0
  br i1 %37, label %38, label %48

38:                                               ; preds = %34
  %39 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 39
  %40 = getelementptr inbounds [2048 x i8], ptr %39, i64 0, i64 0
  %41 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 41
  %42 = getelementptr inbounds [2048 x i8], ptr %41, i64 0, i64 0
  %43 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 40
  %44 = getelementptr inbounds [2048 x i8], ptr %43, i64 0, i64 0
  %45 = load ptr, ptr %10, align 8, !tbaa !9
  %46 = call i64 @reconstruct(ptr noundef %6, ptr noundef %7, ptr noundef %40, ptr noundef %42, ptr noundef %44, ptr noundef %45)
  %47 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 28
  store i64 %46, ptr %47, align 8, !tbaa !21
  br label %51

48:                                               ; preds = %34
  %49 = call i64 @delaunay(ptr noundef %6, ptr noundef %7)
  %50 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 28
  store i64 %49, ptr %50, align 8, !tbaa !21
  br label %51

51:                                               ; preds = %48, %38
  %52 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %53 = load i32, ptr %52, align 8, !tbaa !19
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %79, label %55

55:                                               ; preds = %51
  %56 = call i32 @gettimeofday(ptr noundef %13, ptr noundef %18) #4
  %57 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 1
  %58 = load i32, ptr %57, align 4, !tbaa !20
  %59 = icmp ne i32 %58, 0
  br i1 %59, label %60, label %62

60:                                               ; preds = %55
  %61 = call i32 (ptr, ...) @printf(ptr noundef @.str.1143)
  br label %64

62:                                               ; preds = %55
  %63 = call i32 (ptr, ...) @printf(ptr noundef @.str.1144)
  br label %64

64:                                               ; preds = %62, %60
  %65 = getelementptr inbounds %struct.timeval, ptr %13, i32 0, i32 0
  %66 = load i64, ptr %65, align 8, !tbaa !22
  %67 = getelementptr inbounds %struct.timeval, ptr %12, i32 0, i32 0
  %68 = load i64, ptr %67, align 8, !tbaa !22
  %69 = sub nsw i64 %66, %68
  %70 = mul nsw i64 1000, %69
  %71 = getelementptr inbounds %struct.timeval, ptr %13, i32 0, i32 1
  %72 = load i64, ptr %71, align 8, !tbaa !24
  %73 = getelementptr inbounds %struct.timeval, ptr %12, i32 0, i32 1
  %74 = load i64, ptr %73, align 8, !tbaa !24
  %75 = sub nsw i64 %72, %74
  %76 = sdiv i64 %75, 1000
  %77 = add nsw i64 %70, %76
  %78 = call i32 (ptr, ...) @printf(ptr noundef @.str.1145, i64 noundef %77)
  br label %79

79:                                               ; preds = %64, %51
  %80 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 45
  store ptr null, ptr %80, align 8, !tbaa !25
  %81 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 46
  store ptr null, ptr %81, align 8, !tbaa !26
  %82 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 47
  store ptr null, ptr %82, align 8, !tbaa !27
  %83 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 30
  %84 = load i32, ptr %83, align 8, !tbaa !28
  %85 = icmp ne i32 %84, 0
  br i1 %85, label %86, label %96

86:                                               ; preds = %79
  %87 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 35
  store i32 1, ptr %87, align 8, !tbaa !29
  %88 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 1
  %89 = load i32, ptr %88, align 4, !tbaa !20
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %95, label %91

91:                                               ; preds = %86
  %92 = load ptr, ptr %10, align 8, !tbaa !9
  %93 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 40
  %94 = getelementptr inbounds [2048 x i8], ptr %93, i64 0, i64 0
  call void @formskeleton(ptr noundef %6, ptr noundef %7, ptr noundef %92, ptr noundef %94)
  br label %95

95:                                               ; preds = %91, %86
  br label %96

96:                                               ; preds = %95, %79
  %97 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %98 = load i32, ptr %97, align 8, !tbaa !19
  %99 = icmp ne i32 %98, 0
  br i1 %99, label %125, label %100

100:                                              ; preds = %96
  %101 = call i32 @gettimeofday(ptr noundef %14, ptr noundef %18) #4
  %102 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 30
  %103 = load i32, ptr %102, align 8, !tbaa !28
  %104 = icmp ne i32 %103, 0
  br i1 %104, label %105, label %124

105:                                              ; preds = %100
  %106 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 1
  %107 = load i32, ptr %106, align 4, !tbaa !20
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %124, label %109

109:                                              ; preds = %105
  %110 = getelementptr inbounds %struct.timeval, ptr %14, i32 0, i32 0
  %111 = load i64, ptr %110, align 8, !tbaa !22
  %112 = getelementptr inbounds %struct.timeval, ptr %13, i32 0, i32 0
  %113 = load i64, ptr %112, align 8, !tbaa !22
  %114 = sub nsw i64 %111, %113
  %115 = mul nsw i64 1000, %114
  %116 = getelementptr inbounds %struct.timeval, ptr %14, i32 0, i32 1
  %117 = load i64, ptr %116, align 8, !tbaa !24
  %118 = getelementptr inbounds %struct.timeval, ptr %13, i32 0, i32 1
  %119 = load i64, ptr %118, align 8, !tbaa !24
  %120 = sub nsw i64 %117, %119
  %121 = sdiv i64 %120, 1000
  %122 = add nsw i64 %115, %121
  %123 = call i32 (ptr, ...) @printf(ptr noundef @.str.1146, i64 noundef %122)
  br label %124

124:                                              ; preds = %109, %105, %100
  br label %125

125:                                              ; preds = %124, %96
  %126 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 0
  %127 = load i32, ptr %126, align 8, !tbaa !30
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %129, label %151

129:                                              ; preds = %125
  %130 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 0
  %131 = getelementptr inbounds %struct.memorypool, ptr %130, i32 0, i32 10
  %132 = load i64, ptr %131, align 8, !tbaa !31
  %133 = icmp sgt i64 %132, 0
  br i1 %133, label %134, label %151

134:                                              ; preds = %129
  %135 = load ptr, ptr %10, align 8, !tbaa !9
  %136 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 40
  %137 = getelementptr inbounds [2048 x i8], ptr %136, i64 0, i64 0
  %138 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 21
  %139 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 22
  call void @readholes(ptr noundef %6, ptr noundef %7, ptr noundef %135, ptr noundef %137, ptr noundef %8, ptr noundef %138, ptr noundef %9, ptr noundef %139)
  %140 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 1
  %141 = load i32, ptr %140, align 4, !tbaa !20
  %142 = icmp ne i32 %141, 0
  br i1 %142, label %150, label %143

143:                                              ; preds = %134
  %144 = load ptr, ptr %8, align 8, !tbaa !9
  %145 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 21
  %146 = load i32, ptr %145, align 4, !tbaa !32
  %147 = load ptr, ptr %9, align 8, !tbaa !9
  %148 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 22
  %149 = load i32, ptr %148, align 8, !tbaa !33
  call void @carveholes(ptr noundef %6, ptr noundef %7, ptr noundef %144, i32 noundef %146, ptr noundef %147, i32 noundef %149)
  br label %150

150:                                              ; preds = %143, %134
  br label %154

151:                                              ; preds = %129, %125
  %152 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 21
  store i32 0, ptr %152, align 4, !tbaa !32
  %153 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 22
  store i32 0, ptr %153, align 8, !tbaa !33
  br label %154

154:                                              ; preds = %151, %150
  %155 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %156 = load i32, ptr %155, align 8, !tbaa !19
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %183, label %158

158:                                              ; preds = %154
  %159 = call i32 @gettimeofday(ptr noundef %15, ptr noundef %18) #4
  %160 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 0
  %161 = load i32, ptr %160, align 8, !tbaa !30
  %162 = icmp ne i32 %161, 0
  br i1 %162, label %163, label %182

163:                                              ; preds = %158
  %164 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 1
  %165 = load i32, ptr %164, align 4, !tbaa !20
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %182, label %167

167:                                              ; preds = %163
  %168 = getelementptr inbounds %struct.timeval, ptr %15, i32 0, i32 0
  %169 = load i64, ptr %168, align 8, !tbaa !22
  %170 = getelementptr inbounds %struct.timeval, ptr %14, i32 0, i32 0
  %171 = load i64, ptr %170, align 8, !tbaa !22
  %172 = sub nsw i64 %169, %171
  %173 = mul nsw i64 1000, %172
  %174 = getelementptr inbounds %struct.timeval, ptr %15, i32 0, i32 1
  %175 = load i64, ptr %174, align 8, !tbaa !24
  %176 = getelementptr inbounds %struct.timeval, ptr %14, i32 0, i32 1
  %177 = load i64, ptr %176, align 8, !tbaa !24
  %178 = sub nsw i64 %175, %177
  %179 = sdiv i64 %178, 1000
  %180 = add nsw i64 %173, %179
  %181 = call i32 (ptr, ...) @printf(ptr noundef @.str.1147, i64 noundef %180)
  br label %182

182:                                              ; preds = %167, %163, %158
  br label %183

183:                                              ; preds = %182, %154
  %184 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 2
  %185 = load i32, ptr %184, align 8, !tbaa !34
  %186 = icmp ne i32 %185, 0
  br i1 %186, label %187, label %193

187:                                              ; preds = %183
  %188 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 0
  %189 = getelementptr inbounds %struct.memorypool, ptr %188, i32 0, i32 10
  %190 = load i64, ptr %189, align 8, !tbaa !31
  %191 = icmp sgt i64 %190, 0
  br i1 %191, label %192, label %193

192:                                              ; preds = %187
  call void @enforcequality(ptr noundef %6, ptr noundef %7)
  br label %193

193:                                              ; preds = %192, %187, %183
  %194 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %195 = load i32, ptr %194, align 8, !tbaa !19
  %196 = icmp ne i32 %195, 0
  br i1 %196, label %218, label %197

197:                                              ; preds = %193
  %198 = call i32 @gettimeofday(ptr noundef %16, ptr noundef %18) #4
  %199 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 2
  %200 = load i32, ptr %199, align 8, !tbaa !34
  %201 = icmp ne i32 %200, 0
  br i1 %201, label %202, label %217

202:                                              ; preds = %197
  %203 = getelementptr inbounds %struct.timeval, ptr %16, i32 0, i32 0
  %204 = load i64, ptr %203, align 8, !tbaa !22
  %205 = getelementptr inbounds %struct.timeval, ptr %15, i32 0, i32 0
  %206 = load i64, ptr %205, align 8, !tbaa !22
  %207 = sub nsw i64 %204, %206
  %208 = mul nsw i64 1000, %207
  %209 = getelementptr inbounds %struct.timeval, ptr %16, i32 0, i32 1
  %210 = load i64, ptr %209, align 8, !tbaa !24
  %211 = getelementptr inbounds %struct.timeval, ptr %15, i32 0, i32 1
  %212 = load i64, ptr %211, align 8, !tbaa !24
  %213 = sub nsw i64 %210, %212
  %214 = sdiv i64 %213, 1000
  %215 = add nsw i64 %208, %214
  %216 = call i32 (ptr, ...) @printf(ptr noundef @.str.1148, i64 noundef %215)
  br label %217

217:                                              ; preds = %202, %197
  br label %218

218:                                              ; preds = %217, %193
  %219 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 0
  %220 = getelementptr inbounds %struct.memorypool, ptr %219, i32 0, i32 10
  %221 = load i64, ptr %220, align 8, !tbaa !31
  %222 = mul nsw i64 3, %221
  %223 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 28
  %224 = load i64, ptr %223, align 8, !tbaa !21
  %225 = add nsw i64 %222, %224
  %226 = sdiv i64 %225, 2
  %227 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 24
  store i64 %226, ptr %227, align 8, !tbaa !35
  %228 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 31
  %229 = load i32, ptr %228, align 4, !tbaa !36
  %230 = icmp sgt i32 %229, 1
  br i1 %230, label %231, label %232

231:                                              ; preds = %218
  call void @highorder(ptr noundef %6, ptr noundef %7)
  br label %232

232:                                              ; preds = %231, %218
  %233 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %234 = load i32, ptr %233, align 8, !tbaa !19
  %235 = icmp ne i32 %234, 0
  br i1 %235, label %238, label %236

236:                                              ; preds = %232
  %237 = call i32 (ptr, ...) @printf(ptr noundef @.str.225)
  br label %238

238:                                              ; preds = %236, %232
  %239 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 17
  %240 = load i32, ptr %239, align 4, !tbaa !37
  %241 = icmp ne i32 %240, 0
  br i1 %241, label %250, label %242

242:                                              ; preds = %238
  %243 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 19
  %244 = load i32, ptr %243, align 4, !tbaa !38
  %245 = icmp ne i32 %244, 0
  br i1 %245, label %246, label %257

246:                                              ; preds = %242
  %247 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 37
  %248 = load i32, ptr %247, align 8, !tbaa !39
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %257

250:                                              ; preds = %246, %238
  %251 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %252 = load i32, ptr %251, align 8, !tbaa !19
  %253 = icmp ne i32 %252, 0
  br i1 %253, label %256, label %254

254:                                              ; preds = %250
  %255 = call i32 (ptr, ...) @printf(ptr noundef @.str.1149)
  br label %256

256:                                              ; preds = %254, %250
  call void @numbernodes(ptr noundef %6, ptr noundef %7)
  br label %262

257:                                              ; preds = %246, %242
  %258 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 42
  %259 = getelementptr inbounds [2048 x i8], ptr %258, i64 0, i64 0
  %260 = load i32, ptr %4, align 4, !tbaa !5
  %261 = load ptr, ptr %5, align 8, !tbaa !9
  call void @writenodes(ptr noundef %6, ptr noundef %7, ptr noundef %259, i32 noundef %260, ptr noundef %261)
  br label %262

262:                                              ; preds = %257, %256
  %263 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 18
  %264 = load i32, ptr %263, align 8, !tbaa !40
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %273

266:                                              ; preds = %262
  %267 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %268 = load i32, ptr %267, align 8, !tbaa !19
  %269 = icmp ne i32 %268, 0
  br i1 %269, label %272, label %270

270:                                              ; preds = %266
  %271 = call i32 (ptr, ...) @printf(ptr noundef @.str.1150)
  br label %272

272:                                              ; preds = %270, %266
  br label %278

273:                                              ; preds = %262
  %274 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 43
  %275 = getelementptr inbounds [2048 x i8], ptr %274, i64 0, i64 0
  %276 = load i32, ptr %4, align 4, !tbaa !5
  %277 = load ptr, ptr %5, align 8, !tbaa !9
  call void @writeelements(ptr noundef %6, ptr noundef %7, ptr noundef %275, i32 noundef %276, ptr noundef %277)
  br label %278

278:                                              ; preds = %273, %272
  %279 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 0
  %280 = load i32, ptr %279, align 8, !tbaa !30
  %281 = icmp ne i32 %280, 0
  br i1 %281, label %286, label %282

282:                                              ; preds = %278
  %283 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 7
  %284 = load i32, ptr %283, align 4, !tbaa !41
  %285 = icmp ne i32 %284, 0
  br i1 %285, label %286, label %313

286:                                              ; preds = %282, %278
  %287 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 16
  %288 = load i32, ptr %287, align 8, !tbaa !42
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %294, label %290

290:                                              ; preds = %286
  %291 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 19
  %292 = load i32, ptr %291, align 4, !tbaa !38
  %293 = icmp ne i32 %292, 0
  br i1 %293, label %294, label %301

294:                                              ; preds = %290, %286
  %295 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %296 = load i32, ptr %295, align 8, !tbaa !19
  %297 = icmp ne i32 %296, 0
  br i1 %297, label %300, label %298

298:                                              ; preds = %294
  %299 = call i32 (ptr, ...) @printf(ptr noundef @.str.1151)
  br label %300

300:                                              ; preds = %298, %294
  br label %312

301:                                              ; preds = %290
  %302 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 44
  %303 = getelementptr inbounds [2048 x i8], ptr %302, i64 0, i64 0
  %304 = load ptr, ptr %8, align 8, !tbaa !9
  %305 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 21
  %306 = load i32, ptr %305, align 4, !tbaa !32
  %307 = load ptr, ptr %9, align 8, !tbaa !9
  %308 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 22
  %309 = load i32, ptr %308, align 8, !tbaa !33
  %310 = load i32, ptr %4, align 4, !tbaa !5
  %311 = load ptr, ptr %5, align 8, !tbaa !9
  call void @writepoly(ptr noundef %6, ptr noundef %7, ptr noundef %303, ptr noundef %304, i32 noundef %306, ptr noundef %307, i32 noundef %309, i32 noundef %310, ptr noundef %311)
  br label %312

312:                                              ; preds = %301, %300
  br label %313

313:                                              ; preds = %312, %282
  %314 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 22
  %315 = load i32, ptr %314, align 8, !tbaa !33
  %316 = icmp sgt i32 %315, 0
  br i1 %316, label %317, label %319

317:                                              ; preds = %313
  %318 = load ptr, ptr %9, align 8, !tbaa !9
  call void @trifree(ptr noundef %318)
  br label %319

319:                                              ; preds = %317, %313
  %320 = getelementptr inbounds %struct.mesh, ptr %6, i32 0, i32 21
  %321 = load i32, ptr %320, align 4, !tbaa !32
  %322 = icmp sgt i32 %321, 0
  br i1 %322, label %323, label %325

323:                                              ; preds = %319
  %324 = load ptr, ptr %8, align 8, !tbaa !9
  call void @trifree(ptr noundef %324)
  br label %325

325:                                              ; preds = %323, %319
  %326 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 14
  %327 = load i32, ptr %326, align 8, !tbaa !43
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %329, label %334

329:                                              ; preds = %325
  %330 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 49
  %331 = getelementptr inbounds [2048 x i8], ptr %330, i64 0, i64 0
  %332 = load i32, ptr %4, align 4, !tbaa !5
  %333 = load ptr, ptr %5, align 8, !tbaa !9
  call void @writeoff(ptr noundef %6, ptr noundef %7, ptr noundef %331, i32 noundef %332, ptr noundef %333)
  br label %334

334:                                              ; preds = %329, %325
  %335 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 11
  %336 = load i32, ptr %335, align 4, !tbaa !44
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %338, label %343

338:                                              ; preds = %334
  %339 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 45
  %340 = getelementptr inbounds [2048 x i8], ptr %339, i64 0, i64 0
  %341 = load i32, ptr %4, align 4, !tbaa !5
  %342 = load ptr, ptr %5, align 8, !tbaa !9
  call void @writeedges(ptr noundef %6, ptr noundef %7, ptr noundef %340, i32 noundef %341, ptr noundef %342)
  br label %343

343:                                              ; preds = %338, %334
  %344 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 12
  %345 = load i32, ptr %344, align 8, !tbaa !45
  %346 = icmp ne i32 %345, 0
  br i1 %346, label %347, label %354

347:                                              ; preds = %343
  %348 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 46
  %349 = getelementptr inbounds [2048 x i8], ptr %348, i64 0, i64 0
  %350 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 47
  %351 = getelementptr inbounds [2048 x i8], ptr %350, i64 0, i64 0
  %352 = load i32, ptr %4, align 4, !tbaa !5
  %353 = load ptr, ptr %5, align 8, !tbaa !9
  call void @writevoronoi(ptr noundef %6, ptr noundef %7, ptr noundef %349, ptr noundef %351, i32 noundef %352, ptr noundef %353)
  br label %354

354:                                              ; preds = %347, %343
  %355 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 13
  %356 = load i32, ptr %355, align 4, !tbaa !46
  %357 = icmp ne i32 %356, 0
  br i1 %357, label %358, label %363

358:                                              ; preds = %354
  %359 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 48
  %360 = getelementptr inbounds [2048 x i8], ptr %359, i64 0, i64 0
  %361 = load i32, ptr %4, align 4, !tbaa !5
  %362 = load ptr, ptr %5, align 8, !tbaa !9
  call void @writeneighbors(ptr noundef %6, ptr noundef %7, ptr noundef %360, i32 noundef %361, ptr noundef %362)
  br label %363

363:                                              ; preds = %358, %354
  %364 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 28
  %365 = load i32, ptr %364, align 8, !tbaa !19
  %366 = icmp ne i32 %365, 0
  br i1 %366, label %397, label %367

367:                                              ; preds = %363
  %368 = call i32 @gettimeofday(ptr noundef %17, ptr noundef %18) #4
  %369 = getelementptr inbounds %struct.timeval, ptr %17, i32 0, i32 0
  %370 = load i64, ptr %369, align 8, !tbaa !22
  %371 = getelementptr inbounds %struct.timeval, ptr %16, i32 0, i32 0
  %372 = load i64, ptr %371, align 8, !tbaa !22
  %373 = sub nsw i64 %370, %372
  %374 = mul nsw i64 1000, %373
  %375 = getelementptr inbounds %struct.timeval, ptr %17, i32 0, i32 1
  %376 = load i64, ptr %375, align 8, !tbaa !24
  %377 = getelementptr inbounds %struct.timeval, ptr %16, i32 0, i32 1
  %378 = load i64, ptr %377, align 8, !tbaa !24
  %379 = sub nsw i64 %376, %378
  %380 = sdiv i64 %379, 1000
  %381 = add nsw i64 %374, %380
  %382 = call i32 (ptr, ...) @printf(ptr noundef @.str.1152, i64 noundef %381)
  %383 = getelementptr inbounds %struct.timeval, ptr %17, i32 0, i32 0
  %384 = load i64, ptr %383, align 8, !tbaa !22
  %385 = getelementptr inbounds %struct.timeval, ptr %11, i32 0, i32 0
  %386 = load i64, ptr %385, align 8, !tbaa !22
  %387 = sub nsw i64 %384, %386
  %388 = mul nsw i64 1000, %387
  %389 = getelementptr inbounds %struct.timeval, ptr %17, i32 0, i32 1
  %390 = load i64, ptr %389, align 8, !tbaa !24
  %391 = getelementptr inbounds %struct.timeval, ptr %11, i32 0, i32 1
  %392 = load i64, ptr %391, align 8, !tbaa !24
  %393 = sub nsw i64 %390, %392
  %394 = sdiv i64 %393, 1000
  %395 = add nsw i64 %388, %394
  %396 = call i32 (ptr, ...) @printf(ptr noundef @.str.1153, i64 noundef %395)
  call void @statistics(ptr noundef %6, ptr noundef %7)
  br label %397

397:                                              ; preds = %367, %363
  %398 = getelementptr inbounds %struct.behavior, ptr %7, i32 0, i32 27
  %399 = load i32, ptr %398, align 4, !tbaa !47
  %400 = icmp ne i32 %399, 0
  br i1 %400, label %401, label %402

401:                                              ; preds = %397
  call void @checkmesh(ptr noundef %6, ptr noundef %7)
  call void @checkdelaunay(ptr noundef %6, ptr noundef %7)
  br label %402

402:                                              ; preds = %401, %397
  call void @triangledeinit(ptr noundef %6, ptr noundef %7)
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 24744, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 82904, ptr %6) #4
  ret i32 0
}

; Function Attrs: nounwind
declare i32 @gettimeofday(ptr noundef, ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 132}
!12 = !{!"behavior", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !6, i64 100, !6, i64 104, !6, i64 108, !6, i64 112, !6, i64 116, !6, i64 120, !6, i64 124, !6, i64 128, !6, i64 132, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !7, i64 168, !7, i64 2216, !7, i64 4264, !7, i64 6312, !7, i64 8360, !7, i64 10408, !7, i64 12456, !7, i64 14504, !7, i64 16552, !7, i64 18600, !7, i64 20648, !7, i64 22696}
!13 = !{!"double", !7, i64 0}
!14 = !{!15, !6, i64 82736}
!15 = !{!"mesh", !16, i64 0, !16, i64 88, !16, i64 176, !16, i64 264, !16, i64 352, !16, i64 440, !16, i64 528, !16, i64 616, !7, i64 704, !7, i64 33472, !7, i64 66240, !6, i64 82624, !10, i64 82632, !13, i64 82640, !13, i64 82648, !13, i64 82656, !13, i64 82664, !13, i64 82672, !6, i64 82680, !6, i64 82684, !6, i64 82688, !6, i64 82692, !6, i64 82696, !6, i64 82700, !17, i64 82704, !6, i64 82712, !6, i64 82716, !6, i64 82720, !17, i64 82728, !6, i64 82736, !6, i64 82740, !6, i64 82744, !6, i64 82748, !6, i64 82752, !6, i64 82756, !6, i64 82760, !6, i64 82764, !6, i64 82768, !17, i64 82776, !17, i64 82784, !17, i64 82792, !17, i64 82800, !17, i64 82808, !17, i64 82816, !17, i64 82824, !10, i64 82832, !10, i64 82840, !10, i64 82848, !10, i64 82856, !10, i64 82864, !10, i64 82872, !10, i64 82880, !18, i64 82888}
!16 = !{!"memorypool", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !17, i64 64, !17, i64 72, !6, i64 80, !6, i64 84}
!17 = !{!"long", !7, i64 0}
!18 = !{!"otri", !10, i64 0, !6, i64 8}
!19 = !{!12, !6, i64 112}
!20 = !{!12, !6, i64 4}
!21 = !{!15, !17, i64 82728}
!22 = !{!23, !17, i64 0}
!23 = !{!"timeval", !17, i64 0, !17, i64 8}
!24 = !{!23, !17, i64 8}
!25 = !{!15, !10, i64 82832}
!26 = !{!15, !10, i64 82840}
!27 = !{!15, !10, i64 82848}
!28 = !{!12, !6, i64 120}
!29 = !{!15, !6, i64 82760}
!30 = !{!12, !6, i64 0}
!31 = !{!15, !17, i64 64}
!32 = !{!15, !6, i64 82692}
!33 = !{!15, !6, i64 82696}
!34 = !{!12, !6, i64 8}
!35 = !{!15, !17, i64 82704}
!36 = !{!12, !6, i64 124}
!37 = !{!12, !6, i64 68}
!38 = !{!12, !6, i64 76}
!39 = !{!15, !6, i64 82768}
!40 = !{!12, !6, i64 72}
!41 = !{!12, !6, i64 28}
!42 = !{!12, !6, i64 64}
!43 = !{!12, !6, i64 56}
!44 = !{!12, !6, i64 44}
!45 = !{!12, !6, i64 48}
!46 = !{!12, !6, i64 52}
!47 = !{!12, !6, i64 108}


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

%struct.mesh = type { %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, %struct.memorypool, [4096 x ptr], [4096 x ptr], [4096 x i32], i32, ptr, double, double, double, double, double, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.otri }
%struct.memorypool = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i64, i64, i32, i32 }
%struct.otri = type { ptr, i32 }
%struct.behavior = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8], [2048 x i8] }
%struct.timeval = type { i64, i64 }
%struct.timezone = type { i32, i32 }

@.str.225 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1143 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1144 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1145 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1146 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1147 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1148 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1149 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1150 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1151 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1152 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1153 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @trifree(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @parsecommandline(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @triangledeinit(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @triangleinit(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @checkmesh(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @checkdelaunay(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i64 @delaunay(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i64 @reconstruct(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @formskeleton(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @carveholes(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @enforcequality(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @highorder(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @readnodes(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @readholes(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @writenodes(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @numbernodes(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @writeelements(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @writepoly(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @writeedges(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @writevoronoi(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @writeneighbors(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @writeoff(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @statistics(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  %3 = alloca %struct.mesh, align 8
  %4 = alloca %struct.behavior, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %struct.timeval, align 8
  %9 = alloca %struct.timeval, align 8
  %10 = alloca %struct.timeval, align 8
  %11 = alloca %struct.timeval, align 8
  %12 = alloca %struct.timeval, align 8
  %13 = alloca %struct.timeval, align 8
  %14 = alloca %struct.timeval, align 8
  %15 = alloca %struct.timezone, align 4
  call void @llvm.lifetime.start.p0(i64 82904, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 24744, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #4
  %16 = call i32 @gettimeofday(ptr noundef nonnull %8, ptr noundef nonnull %15) #4
  call void @triangleinit(ptr noundef nonnull %3)
  call void @parsecommandline(i32 noundef %0, ptr noundef %1, ptr noundef nonnull %4)
  %17 = getelementptr inbounds i8, ptr %4, i64 132
  %18 = load i32, ptr %17, align 4, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %3, i64 82736
  store i32 %18, ptr %19, align 8, !tbaa !11
  %20 = getelementptr inbounds i8, ptr %4, i64 168
  %21 = getelementptr inbounds i8, ptr %4, i64 4264
  call void @readnodes(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %20, ptr noundef nonnull %21, ptr noundef nonnull %7)
  %22 = getelementptr inbounds i8, ptr %4, i64 112
  %23 = load i32, ptr %22, align 8, !tbaa !17
  %.not = icmp eq i32 %23, 0
  br i1 %.not, label %24, label %26

24:                                               ; preds = %2
  %25 = call i32 @gettimeofday(ptr noundef nonnull %9, ptr noundef nonnull %15) #4
  br label %26

26:                                               ; preds = %24, %2
  %27 = getelementptr inbounds i8, ptr %4, i64 4
  %28 = load i32, ptr %27, align 4, !tbaa !18
  %.not37 = icmp eq i32 %28, 0
  br i1 %.not37, label %34, label %29

29:                                               ; preds = %26
  %30 = getelementptr inbounds i8, ptr %4, i64 2216
  %31 = getelementptr inbounds i8, ptr %4, i64 6312
  %32 = load ptr, ptr %7, align 8, !tbaa !19
  %33 = call i64 @reconstruct(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %30, ptr noundef nonnull %31, ptr noundef nonnull %21, ptr noundef %32)
  br label %36

34:                                               ; preds = %26
  %35 = call i64 @delaunay(ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %36

36:                                               ; preds = %34, %29
  %.sink = phi i64 [ %35, %34 ], [ %33, %29 ]
  %37 = getelementptr inbounds i8, ptr %3, i64 82728
  store i64 %.sink, ptr %37, align 8
  %38 = load i32, ptr %22, align 8, !tbaa !17
  %.not38 = icmp eq i32 %38, 0
  br i1 %.not38, label %39, label %55

39:                                               ; preds = %36
  %40 = call i32 @gettimeofday(ptr noundef nonnull %10, ptr noundef nonnull %15) #4
  %41 = load i32, ptr %27, align 4, !tbaa !18
  %.not39 = icmp eq i32 %41, 0
  %.str.1144..str.1143 = select i1 %.not39, ptr @.str.1144, ptr @.str.1143
  %42 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.1144..str.1143)
  %43 = load i64, ptr %10, align 8, !tbaa !20
  %44 = load i64, ptr %9, align 8, !tbaa !20
  %45 = sub nsw i64 %43, %44
  %46 = mul nsw i64 %45, 1000
  %47 = getelementptr inbounds i8, ptr %10, i64 8
  %48 = load i64, ptr %47, align 8, !tbaa !22
  %49 = getelementptr inbounds i8, ptr %9, i64 8
  %50 = load i64, ptr %49, align 8, !tbaa !22
  %51 = sub nsw i64 %48, %50
  %52 = sdiv i64 %51, 1000
  %53 = add nsw i64 %52, %46
  %54 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1145, i64 noundef %53)
  br label %55

55:                                               ; preds = %39, %36
  %56 = phi i64 [ %48, %39 ], [ undef, %36 ]
  %57 = phi i64 [ %43, %39 ], [ undef, %36 ]
  %58 = getelementptr inbounds i8, ptr %3, i64 82832
  %59 = getelementptr inbounds i8, ptr %4, i64 120
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %58, i8 0, i64 24, i1 false)
  %60 = load i32, ptr %59, align 8, !tbaa !23
  %.not40 = icmp eq i32 %60, 0
  br i1 %.not40, label %66, label %61

61:                                               ; preds = %55
  %62 = getelementptr inbounds i8, ptr %3, i64 82760
  store i32 1, ptr %62, align 8, !tbaa !24
  %63 = load i32, ptr %27, align 4, !tbaa !18
  %.not41 = icmp eq i32 %63, 0
  br i1 %.not41, label %64, label %66

64:                                               ; preds = %61
  %65 = load ptr, ptr %7, align 8, !tbaa !19
  call void @formskeleton(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %65, ptr noundef nonnull %21)
  br label %66

66:                                               ; preds = %61, %64, %55
  %67 = load i32, ptr %22, align 8, !tbaa !17
  %.not42 = icmp eq i32 %67, 0
  br i1 %.not42, label %68, label %84

68:                                               ; preds = %66
  %69 = call i32 @gettimeofday(ptr noundef nonnull %11, ptr noundef nonnull %15) #4
  %70 = load i32, ptr %59, align 8, !tbaa !23
  %71 = icmp eq i32 %70, 0
  %72 = load i32, ptr %27, align 4
  %73 = icmp ne i32 %72, 0
  %or.cond = select i1 %71, i1 true, i1 %73
  br i1 %or.cond, label %84, label %74

74:                                               ; preds = %68
  %75 = load i64, ptr %11, align 8, !tbaa !20
  %76 = sub nsw i64 %75, %57
  %77 = mul nsw i64 %76, 1000
  %78 = getelementptr inbounds i8, ptr %11, i64 8
  %79 = load i64, ptr %78, align 8, !tbaa !22
  %80 = sub nsw i64 %79, %56
  %81 = sdiv i64 %80, 1000
  %82 = add nsw i64 %81, %77
  %83 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1146, i64 noundef %82)
  br label %84

84:                                               ; preds = %68, %74, %66
  %85 = load i32, ptr %4, align 8, !tbaa !25
  %86 = icmp ne i32 %85, 0
  %87 = getelementptr inbounds i8, ptr %3, i64 64
  %88 = load i64, ptr %87, align 8
  %89 = icmp sgt i64 %88, 0
  %or.cond6 = select i1 %86, i1 %89, i1 false
  %90 = getelementptr inbounds i8, ptr %3, i64 82696
  br i1 %or.cond6, label %91, label %100

91:                                               ; preds = %84
  %92 = load ptr, ptr %7, align 8, !tbaa !19
  %93 = getelementptr inbounds i8, ptr %3, i64 82692
  call void @readholes(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %92, ptr noundef nonnull %21, ptr noundef nonnull %5, ptr noundef nonnull %93, ptr noundef nonnull %6, ptr noundef nonnull %90)
  %94 = load i32, ptr %27, align 4, !tbaa !18
  %.not43 = icmp eq i32 %94, 0
  br i1 %.not43, label %95, label %102

95:                                               ; preds = %91
  %96 = load ptr, ptr %5, align 8, !tbaa !19
  %97 = load i32, ptr %93, align 4, !tbaa !26
  %98 = load ptr, ptr %6, align 8, !tbaa !19
  %99 = load i32, ptr %90, align 8, !tbaa !27
  call void @carveholes(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %96, i32 noundef %97, ptr noundef %98, i32 noundef %99)
  br label %102

100:                                              ; preds = %84
  %101 = getelementptr inbounds i8, ptr %3, i64 82692
  store i32 0, ptr %101, align 4, !tbaa !26
  store i32 0, ptr %90, align 8, !tbaa !27
  br label %102

102:                                              ; preds = %91, %95, %100
  %103 = load i32, ptr %22, align 8, !tbaa !17
  %.not44 = icmp eq i32 %103, 0
  br i1 %.not44, label %104, label %123

104:                                              ; preds = %102
  %105 = call i32 @gettimeofday(ptr noundef nonnull %12, ptr noundef nonnull %15) #4
  %106 = load i32, ptr %4, align 8, !tbaa !25
  %107 = icmp eq i32 %106, 0
  %108 = load i32, ptr %27, align 4
  %109 = icmp ne i32 %108, 0
  %or.cond9 = select i1 %107, i1 true, i1 %109
  br i1 %or.cond9, label %123, label %110

110:                                              ; preds = %104
  %111 = load i64, ptr %12, align 8, !tbaa !20
  %112 = load i64, ptr %11, align 8, !tbaa !20
  %113 = sub nsw i64 %111, %112
  %114 = mul nsw i64 %113, 1000
  %115 = getelementptr inbounds i8, ptr %12, i64 8
  %116 = load i64, ptr %115, align 8, !tbaa !22
  %117 = getelementptr inbounds i8, ptr %11, i64 8
  %118 = load i64, ptr %117, align 8, !tbaa !22
  %119 = sub nsw i64 %116, %118
  %120 = sdiv i64 %119, 1000
  %121 = add nsw i64 %120, %114
  %122 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1147, i64 noundef %121)
  br label %123

123:                                              ; preds = %104, %110, %102
  %124 = getelementptr inbounds i8, ptr %4, i64 8
  %125 = load i32, ptr %124, align 8, !tbaa !28
  %126 = icmp ne i32 %125, 0
  %127 = load i64, ptr %87, align 8
  %128 = icmp sgt i64 %127, 0
  %or.cond13 = select i1 %126, i1 %128, i1 false
  br i1 %or.cond13, label %129, label %130

129:                                              ; preds = %123
  call void @enforcequality(ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %130

130:                                              ; preds = %129, %123
  %131 = load i32, ptr %22, align 8, !tbaa !17
  %.not45 = icmp eq i32 %131, 0
  br i1 %.not45, label %132, label %148

132:                                              ; preds = %130
  %133 = call i32 @gettimeofday(ptr noundef nonnull %13, ptr noundef nonnull %15) #4
  %134 = load i32, ptr %124, align 8, !tbaa !28
  %.not46 = icmp eq i32 %134, 0
  br i1 %.not46, label %148, label %135

135:                                              ; preds = %132
  %136 = load i64, ptr %13, align 8, !tbaa !20
  %137 = load i64, ptr %12, align 8, !tbaa !20
  %138 = sub nsw i64 %136, %137
  %139 = mul nsw i64 %138, 1000
  %140 = getelementptr inbounds i8, ptr %13, i64 8
  %141 = load i64, ptr %140, align 8, !tbaa !22
  %142 = getelementptr inbounds i8, ptr %12, i64 8
  %143 = load i64, ptr %142, align 8, !tbaa !22
  %144 = sub nsw i64 %141, %143
  %145 = sdiv i64 %144, 1000
  %146 = add nsw i64 %145, %139
  %147 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1148, i64 noundef %146)
  br label %148

148:                                              ; preds = %132, %135, %130
  %149 = load i64, ptr %87, align 8, !tbaa !29
  %150 = mul nsw i64 %149, 3
  %151 = load i64, ptr %37, align 8, !tbaa !30
  %152 = add nsw i64 %150, %151
  %153 = sdiv i64 %152, 2
  %154 = getelementptr inbounds i8, ptr %3, i64 82704
  store i64 %153, ptr %154, align 8, !tbaa !31
  %155 = getelementptr inbounds i8, ptr %4, i64 124
  %156 = load i32, ptr %155, align 4, !tbaa !32
  %157 = icmp sgt i32 %156, 1
  br i1 %157, label %158, label %159

158:                                              ; preds = %148
  call void @highorder(ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %159

159:                                              ; preds = %158, %148
  %160 = load i32, ptr %22, align 8, !tbaa !17
  %.not47 = icmp eq i32 %160, 0
  br i1 %.not47, label %161, label %163

161:                                              ; preds = %159
  %162 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.225)
  br label %163

163:                                              ; preds = %161, %159
  %164 = getelementptr inbounds i8, ptr %4, i64 68
  %165 = load i32, ptr %164, align 4, !tbaa !33
  %.not48 = icmp eq i32 %165, 0
  br i1 %.not48, label %166, label %173

166:                                              ; preds = %163
  %167 = getelementptr inbounds i8, ptr %4, i64 76
  %168 = load i32, ptr %167, align 4, !tbaa !34
  %169 = icmp ne i32 %168, 0
  %170 = getelementptr inbounds i8, ptr %3, i64 82768
  %171 = load i32, ptr %170, align 8
  %172 = icmp ne i32 %171, 0
  %or.cond16 = select i1 %169, i1 %172, i1 false
  br i1 %or.cond16, label %173, label %178

173:                                              ; preds = %166, %163
  %174 = load i32, ptr %22, align 8, !tbaa !17
  %.not49 = icmp eq i32 %174, 0
  br i1 %.not49, label %175, label %177

175:                                              ; preds = %173
  %176 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1149)
  br label %177

177:                                              ; preds = %175, %173
  call void @numbernodes(ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %180

178:                                              ; preds = %166
  %179 = getelementptr inbounds i8, ptr %4, i64 8360
  call void @writenodes(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %179, i32 noundef %0, ptr noundef %1)
  br label %180

180:                                              ; preds = %178, %177
  %181 = getelementptr inbounds i8, ptr %4, i64 72
  %182 = load i32, ptr %181, align 8, !tbaa !35
  %.not50 = icmp eq i32 %182, 0
  br i1 %.not50, label %187, label %183

183:                                              ; preds = %180
  %184 = load i32, ptr %22, align 8, !tbaa !17
  %.not51 = icmp eq i32 %184, 0
  br i1 %.not51, label %185, label %189

185:                                              ; preds = %183
  %186 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1150)
  br label %189

187:                                              ; preds = %180
  %188 = getelementptr inbounds i8, ptr %4, i64 10408
  call void @writeelements(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %188, i32 noundef %0, ptr noundef %1)
  br label %189

189:                                              ; preds = %183, %185, %187
  %190 = load i32, ptr %4, align 8, !tbaa !25
  %191 = icmp ne i32 %190, 0
  %192 = getelementptr inbounds i8, ptr %4, i64 28
  %193 = load i32, ptr %192, align 4
  %194 = icmp ne i32 %193, 0
  %or.cond19 = select i1 %191, i1 true, i1 %194
  br i1 %or.cond19, label %195, label %214

195:                                              ; preds = %189
  %196 = getelementptr inbounds i8, ptr %4, i64 64
  %197 = load i32, ptr %196, align 8, !tbaa !36
  %198 = icmp ne i32 %197, 0
  %199 = getelementptr inbounds i8, ptr %4, i64 76
  %200 = load i32, ptr %199, align 4
  %201 = icmp ne i32 %200, 0
  %or.cond22 = select i1 %198, i1 true, i1 %201
  br i1 %or.cond22, label %202, label %206

202:                                              ; preds = %195
  %203 = load i32, ptr %22, align 8, !tbaa !17
  %.not52 = icmp eq i32 %203, 0
  br i1 %.not52, label %204, label %214

204:                                              ; preds = %202
  %205 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1151)
  br label %214

206:                                              ; preds = %195
  %207 = getelementptr inbounds i8, ptr %4, i64 12456
  %208 = load ptr, ptr %5, align 8, !tbaa !19
  %209 = getelementptr inbounds i8, ptr %3, i64 82692
  %210 = load i32, ptr %209, align 4, !tbaa !26
  %211 = load ptr, ptr %6, align 8, !tbaa !19
  %212 = getelementptr inbounds i8, ptr %3, i64 82696
  %213 = load i32, ptr %212, align 8, !tbaa !27
  call void @writepoly(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %207, ptr noundef %208, i32 noundef %210, ptr noundef %211, i32 noundef %213, i32 noundef %0, ptr noundef %1)
  br label %214

214:                                              ; preds = %206, %204, %202, %189
  %215 = getelementptr inbounds i8, ptr %3, i64 82696
  %216 = load i32, ptr %215, align 8, !tbaa !27
  %217 = icmp sgt i32 %216, 0
  br i1 %217, label %218, label %220

218:                                              ; preds = %214
  %219 = load ptr, ptr %6, align 8, !tbaa !19
  call void @trifree(ptr noundef %219)
  br label %220

220:                                              ; preds = %218, %214
  %221 = getelementptr inbounds i8, ptr %3, i64 82692
  %222 = load i32, ptr %221, align 4, !tbaa !26
  %223 = icmp sgt i32 %222, 0
  br i1 %223, label %224, label %226

224:                                              ; preds = %220
  %225 = load ptr, ptr %5, align 8, !tbaa !19
  call void @trifree(ptr noundef %225)
  br label %226

226:                                              ; preds = %224, %220
  %227 = getelementptr inbounds i8, ptr %4, i64 56
  %228 = load i32, ptr %227, align 8, !tbaa !37
  %.not53 = icmp eq i32 %228, 0
  br i1 %.not53, label %231, label %229

229:                                              ; preds = %226
  %230 = getelementptr inbounds i8, ptr %4, i64 22696
  call void @writeoff(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %230, i32 noundef %0, ptr noundef %1)
  br label %231

231:                                              ; preds = %229, %226
  %232 = getelementptr inbounds i8, ptr %4, i64 44
  %233 = load i32, ptr %232, align 4, !tbaa !38
  %.not54 = icmp eq i32 %233, 0
  br i1 %.not54, label %236, label %234

234:                                              ; preds = %231
  %235 = getelementptr inbounds i8, ptr %4, i64 14504
  call void @writeedges(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %235, i32 noundef %0, ptr noundef %1)
  br label %236

236:                                              ; preds = %234, %231
  %237 = getelementptr inbounds i8, ptr %4, i64 48
  %238 = load i32, ptr %237, align 8, !tbaa !39
  %.not55 = icmp eq i32 %238, 0
  br i1 %.not55, label %242, label %239

239:                                              ; preds = %236
  %240 = getelementptr inbounds i8, ptr %4, i64 16552
  %241 = getelementptr inbounds i8, ptr %4, i64 18600
  call void @writevoronoi(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %240, ptr noundef nonnull %241, i32 noundef %0, ptr noundef %1)
  br label %242

242:                                              ; preds = %239, %236
  %243 = getelementptr inbounds i8, ptr %4, i64 52
  %244 = load i32, ptr %243, align 4, !tbaa !40
  %.not56 = icmp eq i32 %244, 0
  br i1 %.not56, label %247, label %245

245:                                              ; preds = %242
  %246 = getelementptr inbounds i8, ptr %4, i64 20648
  call void @writeneighbors(ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %246, i32 noundef %0, ptr noundef %1)
  br label %247

247:                                              ; preds = %245, %242
  %248 = load i32, ptr %22, align 8, !tbaa !17
  %.not57 = icmp eq i32 %248, 0
  br i1 %.not57, label %249, label %272

249:                                              ; preds = %247
  %250 = call i32 @gettimeofday(ptr noundef nonnull %14, ptr noundef nonnull %15) #4
  %251 = load i64, ptr %14, align 8, !tbaa !20
  %252 = load i64, ptr %13, align 8, !tbaa !20
  %253 = sub nsw i64 %251, %252
  %254 = mul nsw i64 %253, 1000
  %255 = getelementptr inbounds i8, ptr %14, i64 8
  %256 = load i64, ptr %255, align 8, !tbaa !22
  %257 = getelementptr inbounds i8, ptr %13, i64 8
  %258 = load i64, ptr %257, align 8, !tbaa !22
  %259 = sub nsw i64 %256, %258
  %260 = sdiv i64 %259, 1000
  %261 = add nsw i64 %260, %254
  %262 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1152, i64 noundef %261)
  %263 = load i64, ptr %8, align 8, !tbaa !20
  %264 = sub nsw i64 %251, %263
  %265 = mul nsw i64 %264, 1000
  %266 = getelementptr inbounds i8, ptr %8, i64 8
  %267 = load i64, ptr %266, align 8, !tbaa !22
  %268 = sub nsw i64 %256, %267
  %269 = sdiv i64 %268, 1000
  %270 = add nsw i64 %269, %265
  %271 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1153, i64 noundef %270)
  call void @statistics(ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %272

272:                                              ; preds = %249, %247
  %273 = getelementptr inbounds i8, ptr %4, i64 108
  %274 = load i32, ptr %273, align 4, !tbaa !41
  %.not58 = icmp eq i32 %274, 0
  br i1 %.not58, label %276, label %275

275:                                              ; preds = %272
  call void @checkmesh(ptr noundef nonnull %3, ptr noundef nonnull %4)
  call void @checkdelaunay(ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %276

276:                                              ; preds = %275, %272
  call void @triangledeinit(ptr noundef nonnull %3, ptr noundef nonnull %4)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 24744, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 82904, ptr nonnull %3) #4
  ret i32 0
}

; Function Attrs: nofree nounwind
declare noundef i32 @gettimeofday(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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, !7, i64 132}
!6 = !{!"behavior", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !8, i64 168, !8, i64 2216, !8, i64 4264, !8, i64 6312, !8, i64 8360, !8, i64 10408, !8, i64 12456, !8, i64 14504, !8, i64 16552, !8, i64 18600, !8, i64 20648, !8, i64 22696}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!12, !7, i64 82736}
!12 = !{!"mesh", !13, i64 0, !13, i64 88, !13, i64 176, !13, i64 264, !13, i64 352, !13, i64 440, !13, i64 528, !13, i64 616, !8, i64 704, !8, i64 33472, !8, i64 66240, !7, i64 82624, !14, i64 82632, !10, i64 82640, !10, i64 82648, !10, i64 82656, !10, i64 82664, !10, i64 82672, !7, i64 82680, !7, i64 82684, !7, i64 82688, !7, i64 82692, !7, i64 82696, !7, i64 82700, !15, i64 82704, !7, i64 82712, !7, i64 82716, !7, i64 82720, !15, i64 82728, !7, i64 82736, !7, i64 82740, !7, i64 82744, !7, i64 82748, !7, i64 82752, !7, i64 82756, !7, i64 82760, !7, i64 82764, !7, i64 82768, !15, i64 82776, !15, i64 82784, !15, i64 82792, !15, i64 82800, !15, i64 82808, !15, i64 82816, !15, i64 82824, !14, i64 82832, !14, i64 82840, !14, i64 82848, !14, i64 82856, !14, i64 82864, !14, i64 82872, !14, i64 82880, !16, i64 82888}
!13 = !{!"memorypool", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !15, i64 64, !15, i64 72, !7, i64 80, !7, i64 84}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!"long", !8, i64 0}
!16 = !{!"otri", !14, i64 0, !7, i64 8}
!17 = !{!6, !7, i64 112}
!18 = !{!6, !7, i64 4}
!19 = !{!14, !14, i64 0}
!20 = !{!21, !15, i64 0}
!21 = !{!"timeval", !15, i64 0, !15, i64 8}
!22 = !{!21, !15, i64 8}
!23 = !{!6, !7, i64 120}
!24 = !{!12, !7, i64 82760}
!25 = !{!6, !7, i64 0}
!26 = !{!12, !7, i64 82692}
!27 = !{!12, !7, i64 82696}
!28 = !{!6, !7, i64 8}
!29 = !{!12, !15, i64 64}
!30 = !{!12, !15, i64 82728}
!31 = !{!12, !15, i64 82704}
!32 = !{!6, !7, i64 124}
!33 = !{!6, !7, i64 68}
!34 = !{!6, !7, i64 76}
!35 = !{!6, !7, i64 72}
!36 = !{!6, !7, i64 64}
!37 = !{!6, !7, i64 56}
!38 = !{!6, !7, i64 44}
!39 = !{!6, !7, i64 48}
!40 = !{!6, !7, i64 52}
!41 = !{!6, !7, i64 108}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,MemCpyOptPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass