; 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.otri = type { ptr, i32 }
%struct.osub = type { ptr, i32 }
%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.flipstacker = type { ptr, ptr }

@plus1mod3 = external dso_local global [3 x i32], align 4
@minus1mod3 = external dso_local global [3 x i32], align 4

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @insertvertex(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @undovertex(ptr noundef %0, ptr noundef %1) #1 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.otri, align 8
  %6 = alloca %struct.otri, align 8
  %7 = alloca %struct.otri, align 8
  %8 = alloca %struct.otri, align 8
  %9 = alloca %struct.otri, align 8
  %10 = alloca %struct.otri, align 8
  %11 = alloca %struct.otri, align 8
  %12 = alloca %struct.otri, align 8
  %13 = alloca %struct.osub, align 8
  %14 = alloca %struct.osub, align 8
  %15 = alloca %struct.osub, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  br label %20

20:                                               ; preds = %695, %2
  %21 = load ptr, ptr %3, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.mesh, ptr %21, i32 0, i32 12
  %23 = load ptr, ptr %22, align 8, !tbaa !9
  %24 = icmp ne ptr %23, null
  br i1 %24, label %25, label %703

25:                                               ; preds = %20
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.mesh, ptr %26, i32 0, i32 12
  %28 = load ptr, ptr %27, align 8, !tbaa !9
  %29 = getelementptr inbounds %struct.flipstacker, ptr %28, i32 0, i32 0
  %30 = load ptr, ptr %29, align 8, !tbaa !16
  %31 = ptrtoint ptr %30 to i64
  %32 = and i64 %31, 3
  %33 = trunc i64 %32 to i32
  %34 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  store i32 %33, ptr %34, align 8, !tbaa !18
  %35 = load ptr, ptr %3, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.mesh, ptr %35, i32 0, i32 12
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  %38 = getelementptr inbounds %struct.flipstacker, ptr %37, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !16
  %40 = ptrtoint ptr %39 to i64
  %41 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %42 = load i32, ptr %41, align 8, !tbaa !18
  %43 = sext i32 %42 to i64
  %44 = xor i64 %40, %43
  %45 = inttoptr i64 %44 to ptr
  %46 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  store ptr %45, ptr %46, align 8, !tbaa !19
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.mesh, ptr %47, i32 0, i32 12
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  %50 = getelementptr inbounds %struct.flipstacker, ptr %49, i32 0, i32 1
  %51 = load ptr, ptr %50, align 8, !tbaa !20
  %52 = icmp eq ptr %51, null
  br i1 %52, label %53, label %353

53:                                               ; preds = %25
  %54 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %55 = load ptr, ptr %54, align 8, !tbaa !19
  %56 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %55, ptr %56, align 8, !tbaa !19
  %57 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %58 = load i32, ptr %57, align 8, !tbaa !18
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %59
  %61 = load i32, ptr %60, align 4, !tbaa !21
  %62 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %61, ptr %62, align 8, !tbaa !18
  %63 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %64 = load ptr, ptr %63, align 8, !tbaa !19
  %65 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %66 = load i32, ptr %65, align 8, !tbaa !18
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds ptr, ptr %64, i64 %67
  %69 = load ptr, ptr %68, align 8, !tbaa !5
  store ptr %69, ptr %18, align 8, !tbaa !5
  %70 = load ptr, ptr %18, align 8, !tbaa !5
  %71 = ptrtoint ptr %70 to i64
  %72 = and i64 %71, 3
  %73 = trunc i64 %72 to i32
  %74 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %73, ptr %74, align 8, !tbaa !18
  %75 = load ptr, ptr %18, align 8, !tbaa !5
  %76 = ptrtoint ptr %75 to i64
  %77 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %78 = load i32, ptr %77, align 8, !tbaa !18
  %79 = sext i32 %78 to i64
  %80 = xor i64 %76, %79
  %81 = inttoptr i64 %80 to ptr
  %82 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %81, ptr %82, align 8, !tbaa !19
  %83 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %84 = load i32, ptr %83, align 8, !tbaa !18
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %85
  %87 = load i32, ptr %86, align 4, !tbaa !21
  %88 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %87, ptr %88, align 8, !tbaa !18
  %89 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %90 = load ptr, ptr %89, align 8, !tbaa !19
  %91 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  store ptr %90, ptr %91, align 8, !tbaa !19
  %92 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %93 = load i32, ptr %92, align 8, !tbaa !18
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !21
  %97 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  store i32 %96, ptr %97, align 8, !tbaa !18
  %98 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  %99 = load ptr, ptr %98, align 8, !tbaa !19
  %100 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %101 = load i32, ptr %100, align 8, !tbaa !18
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds ptr, ptr %99, i64 %102
  %104 = load ptr, ptr %103, align 8, !tbaa !5
  store ptr %104, ptr %18, align 8, !tbaa !5
  %105 = load ptr, ptr %18, align 8, !tbaa !5
  %106 = ptrtoint ptr %105 to i64
  %107 = and i64 %106, 3
  %108 = trunc i64 %107 to i32
  %109 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  store i32 %108, ptr %109, align 8, !tbaa !18
  %110 = load ptr, ptr %18, align 8, !tbaa !5
  %111 = ptrtoint ptr %110 to i64
  %112 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %113 = load i32, ptr %112, align 8, !tbaa !18
  %114 = sext i32 %113 to i64
  %115 = xor i64 %111, %114
  %116 = inttoptr i64 %115 to ptr
  %117 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  store ptr %116, ptr %117, align 8, !tbaa !19
  %118 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %119 = load i32, ptr %118, align 8, !tbaa !18
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %120
  %122 = load i32, ptr %121, align 4, !tbaa !21
  %123 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  store i32 %122, ptr %123, align 8, !tbaa !18
  %124 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %125 = load ptr, ptr %124, align 8, !tbaa !19
  %126 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %127 = load i32, ptr %126, align 8, !tbaa !18
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds ptr, ptr %125, i64 %128
  %130 = load ptr, ptr %129, align 8, !tbaa !5
  store ptr %130, ptr %18, align 8, !tbaa !5
  %131 = load ptr, ptr %18, align 8, !tbaa !5
  %132 = ptrtoint ptr %131 to i64
  %133 = and i64 %132, 3
  %134 = trunc i64 %133 to i32
  %135 = getelementptr inbounds %struct.otri, ptr %9, i32 0, i32 1
  store i32 %134, ptr %135, align 8, !tbaa !18
  %136 = load ptr, ptr %18, align 8, !tbaa !5
  %137 = ptrtoint ptr %136 to i64
  %138 = getelementptr inbounds %struct.otri, ptr %9, i32 0, i32 1
  %139 = load i32, ptr %138, align 8, !tbaa !18
  %140 = sext i32 %139 to i64
  %141 = xor i64 %137, %140
  %142 = inttoptr i64 %141 to ptr
  %143 = getelementptr inbounds %struct.otri, ptr %9, i32 0, i32 0
  store ptr %142, ptr %143, align 8, !tbaa !19
  %144 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  %145 = load ptr, ptr %144, align 8, !tbaa !19
  %146 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %147 = load i32, ptr %146, align 8, !tbaa !18
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds ptr, ptr %145, i64 %148
  %150 = load ptr, ptr %149, align 8, !tbaa !5
  store ptr %150, ptr %18, align 8, !tbaa !5
  %151 = load ptr, ptr %18, align 8, !tbaa !5
  %152 = ptrtoint ptr %151 to i64
  %153 = and i64 %152, 3
  %154 = trunc i64 %153 to i32
  %155 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 1
  store i32 %154, ptr %155, align 8, !tbaa !18
  %156 = load ptr, ptr %18, align 8, !tbaa !5
  %157 = ptrtoint ptr %156 to i64
  %158 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 1
  %159 = load i32, ptr %158, align 8, !tbaa !18
  %160 = sext i32 %159 to i64
  %161 = xor i64 %157, %160
  %162 = inttoptr i64 %161 to ptr
  %163 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 0
  store ptr %162, ptr %163, align 8, !tbaa !19
  %164 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %165 = load ptr, ptr %164, align 8, !tbaa !19
  %166 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %167 = load i32, ptr %166, align 8, !tbaa !18
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %168
  %170 = load i32, ptr %169, align 4, !tbaa !21
  %171 = add nsw i32 %170, 3
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds ptr, ptr %165, i64 %172
  %174 = load ptr, ptr %173, align 8, !tbaa !5
  store ptr %174, ptr %16, align 8, !tbaa !5
  %175 = load ptr, ptr %16, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %177 = load ptr, ptr %176, align 8, !tbaa !19
  %178 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %179 = load i32, ptr %178, align 8, !tbaa !18
  %180 = add nsw i32 %179, 3
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds ptr, ptr %177, i64 %181
  store ptr %175, ptr %182, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %184 = load i32, ptr %183, align 8, !tbaa !18
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !21
  %188 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  store i32 %187, ptr %188, align 8, !tbaa !18
  %189 = getelementptr inbounds %struct.otri, ptr %9, i32 0, i32 0
  %190 = load ptr, ptr %189, align 8, !tbaa !19
  %191 = ptrtoint ptr %190 to i64
  %192 = getelementptr inbounds %struct.otri, ptr %9, i32 0, i32 1
  %193 = load i32, ptr %192, align 8, !tbaa !18
  %194 = sext i32 %193 to i64
  %195 = or i64 %191, %194
  %196 = inttoptr i64 %195 to ptr
  %197 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !19
  %199 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %200 = load i32, ptr %199, align 8, !tbaa !18
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds ptr, ptr %198, i64 %201
  store ptr %196, ptr %202, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %204 = load ptr, ptr %203, align 8, !tbaa !19
  %205 = ptrtoint ptr %204 to i64
  %206 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %207 = load i32, ptr %206, align 8, !tbaa !18
  %208 = sext i32 %207 to i64
  %209 = or i64 %205, %208
  %210 = inttoptr i64 %209 to ptr
  %211 = getelementptr inbounds %struct.otri, ptr %9, i32 0, i32 0
  %212 = load ptr, ptr %211, align 8, !tbaa !19
  %213 = getelementptr inbounds %struct.otri, ptr %9, i32 0, i32 1
  %214 = load i32, ptr %213, align 8, !tbaa !18
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds ptr, ptr %212, i64 %215
  store ptr %210, ptr %216, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %218 = load ptr, ptr %217, align 8, !tbaa !19
  %219 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %220 = load i32, ptr %219, align 8, !tbaa !18
  %221 = add nsw i32 6, %220
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds ptr, ptr %218, i64 %222
  %224 = load ptr, ptr %223, align 8, !tbaa !5
  store ptr %224, ptr %19, align 8, !tbaa !5
  %225 = load ptr, ptr %19, align 8, !tbaa !5
  %226 = ptrtoint ptr %225 to i64
  %227 = and i64 %226, 1
  %228 = trunc i64 %227 to i32
  %229 = getelementptr inbounds %struct.osub, ptr %13, i32 0, i32 1
  store i32 %228, ptr %229, align 8, !tbaa !22
  %230 = load ptr, ptr %19, align 8, !tbaa !5
  %231 = ptrtoint ptr %230 to i64
  %232 = and i64 %231, -4
  %233 = inttoptr i64 %232 to ptr
  %234 = getelementptr inbounds %struct.osub, ptr %13, i32 0, i32 0
  store ptr %233, ptr %234, align 8, !tbaa !24
  %235 = getelementptr inbounds %struct.osub, ptr %13, i32 0, i32 0
  %236 = load ptr, ptr %235, align 8, !tbaa !24
  %237 = ptrtoint ptr %236 to i64
  %238 = getelementptr inbounds %struct.osub, ptr %13, i32 0, i32 1
  %239 = load i32, ptr %238, align 8, !tbaa !22
  %240 = sext i32 %239 to i64
  %241 = or i64 %237, %240
  %242 = inttoptr i64 %241 to ptr
  %243 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %244 = load ptr, ptr %243, align 8, !tbaa !19
  %245 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %246 = load i32, ptr %245, align 8, !tbaa !18
  %247 = add nsw i32 6, %246
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds ptr, ptr %244, i64 %248
  store ptr %242, ptr %249, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %251 = load ptr, ptr %250, align 8, !tbaa !19
  %252 = ptrtoint ptr %251 to i64
  %253 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %254 = load i32, ptr %253, align 8, !tbaa !18
  %255 = sext i32 %254 to i64
  %256 = or i64 %252, %255
  %257 = inttoptr i64 %256 to ptr
  %258 = getelementptr inbounds %struct.osub, ptr %13, i32 0, i32 0
  %259 = load ptr, ptr %258, align 8, !tbaa !24
  %260 = getelementptr inbounds %struct.osub, ptr %13, i32 0, i32 1
  %261 = load i32, ptr %260, align 8, !tbaa !22
  %262 = add nsw i32 6, %261
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds ptr, ptr %259, i64 %263
  store ptr %257, ptr %264, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %266 = load i32, ptr %265, align 8, !tbaa !18
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !21
  %270 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  store i32 %269, ptr %270, align 8, !tbaa !18
  %271 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 0
  %272 = load ptr, ptr %271, align 8, !tbaa !19
  %273 = ptrtoint ptr %272 to i64
  %274 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 1
  %275 = load i32, ptr %274, align 8, !tbaa !18
  %276 = sext i32 %275 to i64
  %277 = or i64 %273, %276
  %278 = inttoptr i64 %277 to ptr
  %279 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %280 = load ptr, ptr %279, align 8, !tbaa !19
  %281 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %282 = load i32, ptr %281, align 8, !tbaa !18
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds ptr, ptr %280, i64 %283
  store ptr %278, ptr %284, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %286 = load ptr, ptr %285, align 8, !tbaa !19
  %287 = ptrtoint ptr %286 to i64
  %288 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %289 = load i32, ptr %288, align 8, !tbaa !18
  %290 = sext i32 %289 to i64
  %291 = or i64 %287, %290
  %292 = inttoptr i64 %291 to ptr
  %293 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 0
  %294 = load ptr, ptr %293, align 8, !tbaa !19
  %295 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 1
  %296 = load i32, ptr %295, align 8, !tbaa !18
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds ptr, ptr %294, i64 %297
  store ptr %292, ptr %298, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  %300 = load ptr, ptr %299, align 8, !tbaa !19
  %301 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %302 = load i32, ptr %301, align 8, !tbaa !18
  %303 = add nsw i32 6, %302
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds ptr, ptr %300, i64 %304
  %306 = load ptr, ptr %305, align 8, !tbaa !5
  store ptr %306, ptr %19, align 8, !tbaa !5
  %307 = load ptr, ptr %19, align 8, !tbaa !5
  %308 = ptrtoint ptr %307 to i64
  %309 = and i64 %308, 1
  %310 = trunc i64 %309 to i32
  %311 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 1
  store i32 %310, ptr %311, align 8, !tbaa !22
  %312 = load ptr, ptr %19, align 8, !tbaa !5
  %313 = ptrtoint ptr %312 to i64
  %314 = and i64 %313, -4
  %315 = inttoptr i64 %314 to ptr
  %316 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 0
  store ptr %315, ptr %316, align 8, !tbaa !24
  %317 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 0
  %318 = load ptr, ptr %317, align 8, !tbaa !24
  %319 = ptrtoint ptr %318 to i64
  %320 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 1
  %321 = load i32, ptr %320, align 8, !tbaa !22
  %322 = sext i32 %321 to i64
  %323 = or i64 %319, %322
  %324 = inttoptr i64 %323 to ptr
  %325 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %326 = load ptr, ptr %325, align 8, !tbaa !19
  %327 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %328 = load i32, ptr %327, align 8, !tbaa !18
  %329 = add nsw i32 6, %328
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds ptr, ptr %326, i64 %330
  store ptr %324, ptr %331, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %333 = load ptr, ptr %332, align 8, !tbaa !19
  %334 = ptrtoint ptr %333 to i64
  %335 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %336 = load i32, ptr %335, align 8, !tbaa !18
  %337 = sext i32 %336 to i64
  %338 = or i64 %334, %337
  %339 = inttoptr i64 %338 to ptr
  %340 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 0
  %341 = load ptr, ptr %340, align 8, !tbaa !24
  %342 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 1
  %343 = load i32, ptr %342, align 8, !tbaa !22
  %344 = add nsw i32 6, %343
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds ptr, ptr %341, i64 %345
  store ptr %339, ptr %346, align 8, !tbaa !5
  %347 = load ptr, ptr %3, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %349 = load ptr, ptr %348, align 8, !tbaa !19
  call void @triangledealloc(ptr noundef %347, ptr noundef %349)
  %350 = load ptr, ptr %3, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  %352 = load ptr, ptr %351, align 8, !tbaa !19
  call void @triangledealloc(ptr noundef %350, ptr noundef %352)
  br label %695

353:                                              ; preds = %25
  %354 = load ptr, ptr %3, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.mesh, ptr %354, i32 0, i32 12
  %356 = load ptr, ptr %355, align 8, !tbaa !9
  %357 = getelementptr inbounds %struct.flipstacker, ptr %356, i32 0, i32 1
  %358 = load ptr, ptr %357, align 8, !tbaa !20
  %359 = icmp eq ptr %358, @insertvertex
  br i1 %359, label %360, label %691

360:                                              ; preds = %353
  %361 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %362 = load ptr, ptr %361, align 8, !tbaa !19
  %363 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  store ptr %362, ptr %363, align 8, !tbaa !19
  %364 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %365 = load i32, ptr %364, align 8, !tbaa !18
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %366
  %368 = load i32, ptr %367, align 4, !tbaa !21
  %369 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  store i32 %368, ptr %369, align 8, !tbaa !18
  %370 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %371 = load ptr, ptr %370, align 8, !tbaa !19
  %372 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %373 = load i32, ptr %372, align 8, !tbaa !18
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds ptr, ptr %371, i64 %374
  %376 = load ptr, ptr %375, align 8, !tbaa !5
  store ptr %376, ptr %18, align 8, !tbaa !5
  %377 = load ptr, ptr %18, align 8, !tbaa !5
  %378 = ptrtoint ptr %377 to i64
  %379 = and i64 %378, 3
  %380 = trunc i64 %379 to i32
  %381 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  store i32 %380, ptr %381, align 8, !tbaa !18
  %382 = load ptr, ptr %18, align 8, !tbaa !5
  %383 = ptrtoint ptr %382 to i64
  %384 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %385 = load i32, ptr %384, align 8, !tbaa !18
  %386 = sext i32 %385 to i64
  %387 = xor i64 %383, %386
  %388 = inttoptr i64 %387 to ptr
  %389 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  store ptr %388, ptr %389, align 8, !tbaa !19
  %390 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %391 = load i32, ptr %390, align 8, !tbaa !18
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !21
  %395 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  store i32 %394, ptr %395, align 8, !tbaa !18
  %396 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  %397 = load ptr, ptr %396, align 8, !tbaa !19
  %398 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %399 = load i32, ptr %398, align 8, !tbaa !18
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds ptr, ptr %397, i64 %400
  %402 = load ptr, ptr %401, align 8, !tbaa !5
  store ptr %402, ptr %18, align 8, !tbaa !5
  %403 = load ptr, ptr %18, align 8, !tbaa !5
  %404 = ptrtoint ptr %403 to i64
  %405 = and i64 %404, 3
  %406 = trunc i64 %405 to i32
  %407 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 1
  store i32 %406, ptr %407, align 8, !tbaa !18
  %408 = load ptr, ptr %18, align 8, !tbaa !5
  %409 = ptrtoint ptr %408 to i64
  %410 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 1
  %411 = load i32, ptr %410, align 8, !tbaa !18
  %412 = sext i32 %411 to i64
  %413 = xor i64 %409, %412
  %414 = inttoptr i64 %413 to ptr
  %415 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 0
  store ptr %414, ptr %415, align 8, !tbaa !19
  %416 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  %417 = load ptr, ptr %416, align 8, !tbaa !19
  %418 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %419 = load i32, ptr %418, align 8, !tbaa !18
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %420
  %422 = load i32, ptr %421, align 4, !tbaa !21
  %423 = add nsw i32 %422, 3
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds ptr, ptr %417, i64 %424
  %426 = load ptr, ptr %425, align 8, !tbaa !5
  store ptr %426, ptr %17, align 8, !tbaa !5
  %427 = load ptr, ptr %17, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %429 = load ptr, ptr %428, align 8, !tbaa !19
  %430 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %431 = load i32, ptr %430, align 8, !tbaa !18
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %432
  %434 = load i32, ptr %433, align 4, !tbaa !21
  %435 = add nsw i32 %434, 3
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds ptr, ptr %429, i64 %436
  store ptr %427, ptr %437, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 0
  %439 = load ptr, ptr %438, align 8, !tbaa !19
  %440 = ptrtoint ptr %439 to i64
  %441 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 1
  %442 = load i32, ptr %441, align 8, !tbaa !18
  %443 = sext i32 %442 to i64
  %444 = or i64 %440, %443
  %445 = inttoptr i64 %444 to ptr
  %446 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %447 = load ptr, ptr %446, align 8, !tbaa !19
  %448 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %449 = load i32, ptr %448, align 8, !tbaa !18
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds ptr, ptr %447, i64 %450
  store ptr %445, ptr %451, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %453 = load ptr, ptr %452, align 8, !tbaa !19
  %454 = ptrtoint ptr %453 to i64
  %455 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %456 = load i32, ptr %455, align 8, !tbaa !18
  %457 = sext i32 %456 to i64
  %458 = or i64 %454, %457
  %459 = inttoptr i64 %458 to ptr
  %460 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 0
  %461 = load ptr, ptr %460, align 8, !tbaa !19
  %462 = getelementptr inbounds %struct.otri, ptr %10, i32 0, i32 1
  %463 = load i32, ptr %462, align 8, !tbaa !18
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds ptr, ptr %461, i64 %464
  store ptr %459, ptr %465, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  %467 = load ptr, ptr %466, align 8, !tbaa !19
  %468 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 1
  %469 = load i32, ptr %468, align 8, !tbaa !18
  %470 = add nsw i32 6, %469
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds ptr, ptr %467, i64 %471
  %473 = load ptr, ptr %472, align 8, !tbaa !5
  store ptr %473, ptr %19, align 8, !tbaa !5
  %474 = load ptr, ptr %19, align 8, !tbaa !5
  %475 = ptrtoint ptr %474 to i64
  %476 = and i64 %475, 1
  %477 = trunc i64 %476 to i32
  %478 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 1
  store i32 %477, ptr %478, align 8, !tbaa !22
  %479 = load ptr, ptr %19, align 8, !tbaa !5
  %480 = ptrtoint ptr %479 to i64
  %481 = and i64 %480, -4
  %482 = inttoptr i64 %481 to ptr
  %483 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 0
  store ptr %482, ptr %483, align 8, !tbaa !24
  %484 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 0
  %485 = load ptr, ptr %484, align 8, !tbaa !24
  %486 = ptrtoint ptr %485 to i64
  %487 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 1
  %488 = load i32, ptr %487, align 8, !tbaa !22
  %489 = sext i32 %488 to i64
  %490 = or i64 %486, %489
  %491 = inttoptr i64 %490 to ptr
  %492 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %493 = load ptr, ptr %492, align 8, !tbaa !19
  %494 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %495 = load i32, ptr %494, align 8, !tbaa !18
  %496 = add nsw i32 6, %495
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds ptr, ptr %493, i64 %497
  store ptr %491, ptr %498, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %500 = load ptr, ptr %499, align 8, !tbaa !19
  %501 = ptrtoint ptr %500 to i64
  %502 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %503 = load i32, ptr %502, align 8, !tbaa !18
  %504 = sext i32 %503 to i64
  %505 = or i64 %501, %504
  %506 = inttoptr i64 %505 to ptr
  %507 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 0
  %508 = load ptr, ptr %507, align 8, !tbaa !24
  %509 = getelementptr inbounds %struct.osub, ptr %14, i32 0, i32 1
  %510 = load i32, ptr %509, align 8, !tbaa !22
  %511 = add nsw i32 6, %510
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds ptr, ptr %508, i64 %512
  store ptr %506, ptr %513, align 8, !tbaa !5
  %514 = load ptr, ptr %3, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.otri, ptr %7, i32 0, i32 0
  %516 = load ptr, ptr %515, align 8, !tbaa !19
  call void @triangledealloc(ptr noundef %514, ptr noundef %516)
  %517 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %518 = load ptr, ptr %517, align 8, !tbaa !19
  %519 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %520 = load i32, ptr %519, align 8, !tbaa !18
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds ptr, ptr %518, i64 %521
  %523 = load ptr, ptr %522, align 8, !tbaa !5
  store ptr %523, ptr %18, align 8, !tbaa !5
  %524 = load ptr, ptr %18, align 8, !tbaa !5
  %525 = ptrtoint ptr %524 to i64
  %526 = and i64 %525, 3
  %527 = trunc i64 %526 to i32
  %528 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  store i32 %527, ptr %528, align 8, !tbaa !18
  %529 = load ptr, ptr %18, align 8, !tbaa !5
  %530 = ptrtoint ptr %529 to i64
  %531 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %532 = load i32, ptr %531, align 8, !tbaa !18
  %533 = sext i32 %532 to i64
  %534 = xor i64 %530, %533
  %535 = inttoptr i64 %534 to ptr
  %536 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  store ptr %535, ptr %536, align 8, !tbaa !19
  %537 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %538 = load ptr, ptr %537, align 8, !tbaa !19
  %539 = load ptr, ptr %3, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.mesh, ptr %539, i32 0, i32 48
  %541 = load ptr, ptr %540, align 8, !tbaa !25
  %542 = icmp ne ptr %538, %541
  br i1 %542, label %543, label %686

543:                                              ; preds = %360
  %544 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %545 = load i32, ptr %544, align 8, !tbaa !18
  %546 = sext i32 %545 to i64
  %547 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %546
  %548 = load i32, ptr %547, align 4, !tbaa !21
  %549 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  store i32 %548, ptr %549, align 8, !tbaa !18
  %550 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %551 = load ptr, ptr %550, align 8, !tbaa !19
  %552 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %553 = load i32, ptr %552, align 8, !tbaa !18
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds ptr, ptr %551, i64 %554
  %556 = load ptr, ptr %555, align 8, !tbaa !5
  store ptr %556, ptr %18, align 8, !tbaa !5
  %557 = load ptr, ptr %18, align 8, !tbaa !5
  %558 = ptrtoint ptr %557 to i64
  %559 = and i64 %558, 3
  %560 = trunc i64 %559 to i32
  %561 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 1
  store i32 %560, ptr %561, align 8, !tbaa !18
  %562 = load ptr, ptr %18, align 8, !tbaa !5
  %563 = ptrtoint ptr %562 to i64
  %564 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 1
  %565 = load i32, ptr %564, align 8, !tbaa !18
  %566 = sext i32 %565 to i64
  %567 = xor i64 %563, %566
  %568 = inttoptr i64 %567 to ptr
  %569 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 0
  store ptr %568, ptr %569, align 8, !tbaa !19
  %570 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 1
  %571 = load i32, ptr %570, align 8, !tbaa !18
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %572
  %574 = load i32, ptr %573, align 4, !tbaa !21
  %575 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 1
  store i32 %574, ptr %575, align 8, !tbaa !18
  %576 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 0
  %577 = load ptr, ptr %576, align 8, !tbaa !19
  %578 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 1
  %579 = load i32, ptr %578, align 8, !tbaa !18
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds ptr, ptr %577, i64 %580
  %582 = load ptr, ptr %581, align 8, !tbaa !5
  store ptr %582, ptr %18, align 8, !tbaa !5
  %583 = load ptr, ptr %18, align 8, !tbaa !5
  %584 = ptrtoint ptr %583 to i64
  %585 = and i64 %584, 3
  %586 = trunc i64 %585 to i32
  %587 = getelementptr inbounds %struct.otri, ptr %11, i32 0, i32 1
  store i32 %586, ptr %587, align 8, !tbaa !18
  %588 = load ptr, ptr %18, align 8, !tbaa !5
  %589 = ptrtoint ptr %588 to i64
  %590 = getelementptr inbounds %struct.otri, ptr %11, i32 0, i32 1
  %591 = load i32, ptr %590, align 8, !tbaa !18
  %592 = sext i32 %591 to i64
  %593 = xor i64 %589, %592
  %594 = inttoptr i64 %593 to ptr
  %595 = getelementptr inbounds %struct.otri, ptr %11, i32 0, i32 0
  store ptr %594, ptr %595, align 8, !tbaa !19
  %596 = load ptr, ptr %17, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %598 = load ptr, ptr %597, align 8, !tbaa !19
  %599 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %600 = load i32, ptr %599, align 8, !tbaa !18
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %601
  %603 = load i32, ptr %602, align 4, !tbaa !21
  %604 = add nsw i32 %603, 3
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds ptr, ptr %598, i64 %605
  store ptr %596, ptr %606, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.otri, ptr %11, i32 0, i32 0
  %608 = load ptr, ptr %607, align 8, !tbaa !19
  %609 = ptrtoint ptr %608 to i64
  %610 = getelementptr inbounds %struct.otri, ptr %11, i32 0, i32 1
  %611 = load i32, ptr %610, align 8, !tbaa !18
  %612 = sext i32 %611 to i64
  %613 = or i64 %609, %612
  %614 = inttoptr i64 %613 to ptr
  %615 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %616 = load ptr, ptr %615, align 8, !tbaa !19
  %617 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %618 = load i32, ptr %617, align 8, !tbaa !18
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds ptr, ptr %616, i64 %619
  store ptr %614, ptr %620, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %622 = load ptr, ptr %621, align 8, !tbaa !19
  %623 = ptrtoint ptr %622 to i64
  %624 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %625 = load i32, ptr %624, align 8, !tbaa !18
  %626 = sext i32 %625 to i64
  %627 = or i64 %623, %626
  %628 = inttoptr i64 %627 to ptr
  %629 = getelementptr inbounds %struct.otri, ptr %11, i32 0, i32 0
  %630 = load ptr, ptr %629, align 8, !tbaa !19
  %631 = getelementptr inbounds %struct.otri, ptr %11, i32 0, i32 1
  %632 = load i32, ptr %631, align 8, !tbaa !18
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds ptr, ptr %630, i64 %633
  store ptr %628, ptr %634, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 0
  %636 = load ptr, ptr %635, align 8, !tbaa !19
  %637 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 1
  %638 = load i32, ptr %637, align 8, !tbaa !18
  %639 = add nsw i32 6, %638
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds ptr, ptr %636, i64 %640
  %642 = load ptr, ptr %641, align 8, !tbaa !5
  store ptr %642, ptr %19, align 8, !tbaa !5
  %643 = load ptr, ptr %19, align 8, !tbaa !5
  %644 = ptrtoint ptr %643 to i64
  %645 = and i64 %644, 1
  %646 = trunc i64 %645 to i32
  %647 = getelementptr inbounds %struct.osub, ptr %15, i32 0, i32 1
  store i32 %646, ptr %647, align 8, !tbaa !22
  %648 = load ptr, ptr %19, align 8, !tbaa !5
  %649 = ptrtoint ptr %648 to i64
  %650 = and i64 %649, -4
  %651 = inttoptr i64 %650 to ptr
  %652 = getelementptr inbounds %struct.osub, ptr %15, i32 0, i32 0
  store ptr %651, ptr %652, align 8, !tbaa !24
  %653 = getelementptr inbounds %struct.osub, ptr %15, i32 0, i32 0
  %654 = load ptr, ptr %653, align 8, !tbaa !24
  %655 = ptrtoint ptr %654 to i64
  %656 = getelementptr inbounds %struct.osub, ptr %15, i32 0, i32 1
  %657 = load i32, ptr %656, align 8, !tbaa !22
  %658 = sext i32 %657 to i64
  %659 = or i64 %655, %658
  %660 = inttoptr i64 %659 to ptr
  %661 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %662 = load ptr, ptr %661, align 8, !tbaa !19
  %663 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %664 = load i32, ptr %663, align 8, !tbaa !18
  %665 = add nsw i32 6, %664
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds ptr, ptr %662, i64 %666
  store ptr %660, ptr %667, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 0
  %669 = load ptr, ptr %668, align 8, !tbaa !19
  %670 = ptrtoint ptr %669 to i64
  %671 = getelementptr inbounds %struct.otri, ptr %12, i32 0, i32 1
  %672 = load i32, ptr %671, align 8, !tbaa !18
  %673 = sext i32 %672 to i64
  %674 = or i64 %670, %673
  %675 = inttoptr i64 %674 to ptr
  %676 = getelementptr inbounds %struct.osub, ptr %15, i32 0, i32 0
  %677 = load ptr, ptr %676, align 8, !tbaa !24
  %678 = getelementptr inbounds %struct.osub, ptr %15, i32 0, i32 1
  %679 = load i32, ptr %678, align 8, !tbaa !22
  %680 = add nsw i32 6, %679
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds ptr, ptr %677, i64 %681
  store ptr %675, ptr %682, align 8, !tbaa !5
  %683 = load ptr, ptr %3, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.otri, ptr %8, i32 0, i32 0
  %685 = load ptr, ptr %684, align 8, !tbaa !19
  call void @triangledealloc(ptr noundef %683, ptr noundef %685)
  br label %686

686:                                              ; preds = %543, %360
  %687 = load ptr, ptr %3, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.mesh, ptr %687, i32 0, i32 12
  %689 = load ptr, ptr %688, align 8, !tbaa !9
  %690 = getelementptr inbounds %struct.flipstacker, ptr %689, i32 0, i32 1
  store ptr null, ptr %690, align 8, !tbaa !20
  br label %694

691:                                              ; preds = %353
  %692 = load ptr, ptr %3, align 8, !tbaa !5
  %693 = load ptr, ptr %4, align 8, !tbaa !5
  call void @unflip(ptr noundef %692, ptr noundef %693, ptr noundef %5)
  br label %694

694:                                              ; preds = %691, %686
  br label %695

695:                                              ; preds = %694, %53
  %696 = load ptr, ptr %3, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.mesh, ptr %696, i32 0, i32 12
  %698 = load ptr, ptr %697, align 8, !tbaa !9
  %699 = getelementptr inbounds %struct.flipstacker, ptr %698, i32 0, i32 1
  %700 = load ptr, ptr %699, align 8, !tbaa !20
  %701 = load ptr, ptr %3, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.mesh, ptr %701, i32 0, i32 12
  store ptr %700, ptr %702, align 8, !tbaa !9
  br label %20, !llvm.loop !26

703:                                              ; preds = %20
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #2
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 82632}
!10 = !{!"mesh", !11, i64 0, !11, i64 88, !11, i64 176, !11, i64 264, !11, i64 352, !11, i64 440, !11, i64 528, !11, i64 616, !7, i64 704, !7, i64 33472, !7, i64 66240, !12, i64 82624, !6, i64 82632, !14, i64 82640, !14, i64 82648, !14, i64 82656, !14, i64 82664, !14, i64 82672, !12, i64 82680, !12, i64 82684, !12, i64 82688, !12, i64 82692, !12, i64 82696, !12, i64 82700, !13, i64 82704, !12, i64 82712, !12, i64 82716, !12, i64 82720, !13, i64 82728, !12, i64 82736, !12, i64 82740, !12, i64 82744, !12, i64 82748, !12, i64 82752, !12, i64 82756, !12, i64 82760, !12, i64 82764, !12, i64 82768, !13, i64 82776, !13, i64 82784, !13, i64 82792, !13, i64 82800, !13, i64 82808, !13, i64 82816, !13, i64 82824, !6, i64 82832, !6, i64 82840, !6, i64 82848, !6, i64 82856, !6, i64 82864, !6, i64 82872, !6, i64 82880, !15, i64 82888}
!11 = !{!"memorypool", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !13, i64 64, !13, i64 72, !12, i64 80, !12, i64 84}
!12 = !{!"int", !7, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!"otri", !6, i64 0, !12, i64 8}
!16 = !{!17, !6, i64 0}
!17 = !{!"flipstacker", !6, i64 0, !6, i64 8}
!18 = !{!15, !12, i64 8}
!19 = !{!15, !6, i64 0}
!20 = !{!17, !6, i64 8}
!21 = !{!12, !12, i64 0}
!22 = !{!23, !12, i64 8}
!23 = !{!"osub", !6, i64 0, !12, i64 8}
!24 = !{!23, !6, i64 0}
!25 = !{!10, !6, i64 82856}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}


; 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.otri = type { ptr, i32 }

@plus1mod3 = external dso_local local_unnamed_addr global [3 x i32], align 4
@minus1mod3 = external dso_local local_unnamed_addr global [3 x i32], align 4

; 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: nounwind uwtable
declare dso_local void @triangledealloc(ptr noundef, ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @insertvertex(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @undovertex(ptr noundef %0, ptr noundef %1) local_unnamed_addr #1 {
  %3 = alloca %struct.otri, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #2
  %4 = getelementptr inbounds i8, ptr %0, i64 82632
  %5 = load ptr, ptr %4, align 8, !tbaa !5
  %.not142 = icmp eq ptr %5, null
  br i1 %.not142, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %2
  %6 = getelementptr inbounds i8, ptr %3, i64 8
  %7 = getelementptr inbounds i8, ptr %0, i64 82856
  br label %8

8:                                                ; preds = %.lr.ph, %215
  %9 = phi ptr [ %5, %.lr.ph ], [ %218, %215 ]
  %10 = load ptr, ptr %9, align 8, !tbaa !15
  %11 = ptrtoint ptr %10 to i64
  %12 = trunc i64 %11 to i32
  %13 = and i32 %12, 3
  store i32 %13, ptr %6, align 8, !tbaa !17
  %14 = and i64 %11, -4
  %15 = inttoptr i64 %14 to ptr
  store ptr %15, ptr %3, align 8, !tbaa !18
  %16 = getelementptr inbounds i8, ptr %9, i64 8
  %17 = load ptr, ptr %16, align 8, !tbaa !19
  %18 = icmp eq ptr %17, null
  br i1 %18, label %19, label %116

19:                                               ; preds = %8
  %20 = and i64 %11, 3
  %21 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %20
  %22 = load i32, ptr %21, align 4, !tbaa !20
  %23 = sext i32 %22 to i64
  %24 = getelementptr inbounds ptr, ptr %15, i64 %23
  %25 = load ptr, ptr %24, align 8, !tbaa !21
  %26 = ptrtoint ptr %25 to i64
  %27 = and i64 %26, 3
  %28 = and i64 %26, -4
  %29 = inttoptr i64 %28 to ptr
  %30 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %27
  %31 = load i32, ptr %30, align 4, !tbaa !20
  %32 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %20
  %33 = load i32, ptr %32, align 4, !tbaa !20
  %34 = sext i32 %33 to i64
  %35 = getelementptr inbounds ptr, ptr %15, i64 %34
  %36 = load ptr, ptr %35, align 8, !tbaa !21
  %37 = ptrtoint ptr %36 to i64
  %38 = and i64 %37, 3
  %39 = and i64 %37, -4
  %40 = inttoptr i64 %39 to ptr
  %41 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %38
  %42 = load i32, ptr %41, align 4, !tbaa !20
  %43 = sext i32 %31 to i64
  %44 = getelementptr inbounds ptr, ptr %29, i64 %43
  %45 = load ptr, ptr %44, align 8, !tbaa !21
  %46 = ptrtoint ptr %45 to i64
  %47 = and i64 %46, 3
  %48 = and i64 %46, -4
  %49 = inttoptr i64 %48 to ptr
  %50 = sext i32 %42 to i64
  %51 = getelementptr inbounds ptr, ptr %40, i64 %50
  %52 = load ptr, ptr %51, align 8, !tbaa !21
  %53 = ptrtoint ptr %52 to i64
  %54 = and i64 %53, 3
  %55 = and i64 %53, -4
  %56 = inttoptr i64 %55 to ptr
  %57 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %43
  %58 = load i32, ptr %57, align 4, !tbaa !20
  %59 = sext i32 %58 to i64
  %60 = getelementptr ptr, ptr %29, i64 %59
  %61 = getelementptr i8, ptr %60, i64 24
  %62 = load ptr, ptr %61, align 8, !tbaa !21
  %63 = getelementptr ptr, ptr %15, i64 %20
  %64 = getelementptr i8, ptr %63, i64 24
  store ptr %62, ptr %64, align 8, !tbaa !21
  %65 = load ptr, ptr %3, align 8, !tbaa !18
  %66 = getelementptr inbounds ptr, ptr %65, i64 %23
  store ptr %45, ptr %66, align 8, !tbaa !21
  %67 = load ptr, ptr %3, align 8, !tbaa !18
  %68 = ptrtoint ptr %67 to i64
  %69 = or i64 %68, %23
  %70 = inttoptr i64 %69 to ptr
  %71 = getelementptr inbounds ptr, ptr %49, i64 %47
  store ptr %70, ptr %71, align 8, !tbaa !21
  %72 = getelementptr i8, ptr %44, i64 48
  %73 = load ptr, ptr %72, align 8, !tbaa !21
  %74 = ptrtoint ptr %73 to i64
  %75 = and i64 %74, 1
  %76 = and i64 %74, -4
  %77 = inttoptr i64 %76 to ptr
  %78 = and i64 %74, -3
  %79 = inttoptr i64 %78 to ptr
  %80 = load ptr, ptr %3, align 8, !tbaa !18
  %81 = getelementptr ptr, ptr %80, i64 %23
  %82 = getelementptr i8, ptr %81, i64 48
  store ptr %79, ptr %82, align 8, !tbaa !21
  %83 = load ptr, ptr %3, align 8, !tbaa !18
  %84 = ptrtoint ptr %83 to i64
  %85 = or i64 %84, %23
  %86 = inttoptr i64 %85 to ptr
  %87 = or disjoint i64 %75, 6
  %88 = getelementptr inbounds ptr, ptr %77, i64 %87
  store ptr %86, ptr %88, align 8, !tbaa !21
  %89 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %23
  %90 = load i32, ptr %89, align 4, !tbaa !20
  store i32 %90, ptr %6, align 8, !tbaa !17
  %91 = load ptr, ptr %3, align 8, !tbaa !18
  %92 = sext i32 %90 to i64
  %93 = getelementptr inbounds ptr, ptr %91, i64 %92
  store ptr %52, ptr %93, align 8, !tbaa !21
  %94 = load ptr, ptr %3, align 8, !tbaa !18
  %95 = ptrtoint ptr %94 to i64
  %96 = or i64 %95, %92
  %97 = inttoptr i64 %96 to ptr
  %98 = getelementptr inbounds ptr, ptr %56, i64 %54
  store ptr %97, ptr %98, align 8, !tbaa !21
  %99 = getelementptr i8, ptr %51, i64 48
  %100 = load ptr, ptr %99, align 8, !tbaa !21
  %101 = ptrtoint ptr %100 to i64
  %102 = and i64 %101, 1
  %103 = and i64 %101, -4
  %104 = inttoptr i64 %103 to ptr
  %105 = and i64 %101, -3
  %106 = inttoptr i64 %105 to ptr
  %107 = load ptr, ptr %3, align 8, !tbaa !18
  %108 = getelementptr ptr, ptr %107, i64 %92
  %109 = getelementptr i8, ptr %108, i64 48
  store ptr %106, ptr %109, align 8, !tbaa !21
  %110 = load ptr, ptr %3, align 8, !tbaa !18
  %111 = ptrtoint ptr %110 to i64
  %112 = or i64 %111, %92
  %113 = inttoptr i64 %112 to ptr
  %114 = or disjoint i64 %102, 6
  %115 = getelementptr inbounds ptr, ptr %104, i64 %114
  store ptr %113, ptr %115, align 8, !tbaa !21
  call void @triangledealloc(ptr noundef nonnull %0, ptr noundef %29)
  call void @triangledealloc(ptr noundef nonnull %0, ptr noundef %40)
  br label %215

116:                                              ; preds = %8
  %117 = icmp eq ptr %17, @insertvertex
  br i1 %117, label %118, label %214

118:                                              ; preds = %116
  %119 = and i64 %11, 3
  %120 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %119
  %121 = load i32, ptr %120, align 4, !tbaa !20
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds ptr, ptr %15, i64 %122
  %124 = load ptr, ptr %123, align 8, !tbaa !21
  %125 = ptrtoint ptr %124 to i64
  %126 = and i64 %125, 3
  %127 = and i64 %125, -4
  %128 = inttoptr i64 %127 to ptr
  %129 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %126
  %130 = load i32, ptr %129, align 4, !tbaa !20
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds ptr, ptr %128, i64 %131
  %133 = load ptr, ptr %132, align 8, !tbaa !21
  %134 = ptrtoint ptr %133 to i64
  %135 = and i64 %134, 3
  %136 = and i64 %134, -4
  %137 = inttoptr i64 %136 to ptr
  %138 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %131
  %139 = load i32, ptr %138, align 4, !tbaa !20
  %140 = sext i32 %139 to i64
  %141 = getelementptr ptr, ptr %128, i64 %140
  %142 = getelementptr i8, ptr %141, i64 24
  %143 = load ptr, ptr %142, align 8, !tbaa !21
  %144 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %119
  %145 = load i32, ptr %144, align 4, !tbaa !20
  %146 = sext i32 %145 to i64
  %147 = getelementptr ptr, ptr %15, i64 %146
  %148 = getelementptr i8, ptr %147, i64 24
  store ptr %143, ptr %148, align 8, !tbaa !21
  store ptr %133, ptr %123, align 8, !tbaa !21
  %149 = or i64 %14, %122
  %150 = inttoptr i64 %149 to ptr
  %151 = getelementptr inbounds ptr, ptr %137, i64 %135
  store ptr %150, ptr %151, align 8, !tbaa !21
  %152 = getelementptr i8, ptr %132, i64 48
  %153 = load ptr, ptr %152, align 8, !tbaa !21
  %154 = ptrtoint ptr %153 to i64
  %155 = and i64 %154, 1
  %156 = and i64 %154, -4
  %157 = inttoptr i64 %156 to ptr
  %158 = and i64 %154, -3
  %159 = inttoptr i64 %158 to ptr
  %160 = getelementptr i8, ptr %123, i64 48
  store ptr %159, ptr %160, align 8, !tbaa !21
  %161 = or disjoint i64 %155, 6
  %162 = getelementptr inbounds ptr, ptr %157, i64 %161
  store ptr %150, ptr %162, align 8, !tbaa !21
  call void @triangledealloc(ptr noundef nonnull %0, ptr noundef %128)
  %163 = load ptr, ptr %3, align 8, !tbaa !18
  %164 = load i32, ptr %6, align 8, !tbaa !17
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds ptr, ptr %163, i64 %165
  %167 = load ptr, ptr %166, align 8, !tbaa !21
  %168 = ptrtoint ptr %167 to i64
  %169 = and i64 %168, -4
  %170 = inttoptr i64 %169 to ptr
  %171 = load ptr, ptr %7, align 8, !tbaa !22
  %.not141 = icmp eq ptr %171, %170
  br i1 %.not141, label %211, label %172

172:                                              ; preds = %118
  %173 = and i64 %168, 3
  %174 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %173
  %175 = load i32, ptr %174, align 4, !tbaa !20
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds ptr, ptr %170, i64 %176
  %178 = load ptr, ptr %177, align 8, !tbaa !21
  %179 = ptrtoint ptr %178 to i64
  %180 = and i64 %179, 3
  %181 = and i64 %179, -4
  %182 = inttoptr i64 %181 to ptr
  %183 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %180
  %184 = load i32, ptr %183, align 4, !tbaa !20
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds ptr, ptr %182, i64 %185
  %187 = load ptr, ptr %186, align 8, !tbaa !21
  %188 = ptrtoint ptr %187 to i64
  %189 = and i64 %188, 3
  %190 = and i64 %188, -4
  %191 = inttoptr i64 %190 to ptr
  %192 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %176
  %193 = load i32, ptr %192, align 4, !tbaa !20
  %194 = sext i32 %193 to i64
  %195 = getelementptr ptr, ptr %170, i64 %194
  %196 = getelementptr i8, ptr %195, i64 24
  store ptr %143, ptr %196, align 8, !tbaa !21
  store ptr %187, ptr %177, align 8, !tbaa !21
  %197 = or i64 %169, %176
  %198 = inttoptr i64 %197 to ptr
  %199 = getelementptr inbounds ptr, ptr %191, i64 %189
  store ptr %198, ptr %199, align 8, !tbaa !21
  %200 = getelementptr i8, ptr %186, i64 48
  %201 = load ptr, ptr %200, align 8, !tbaa !21
  %202 = ptrtoint ptr %201 to i64
  %203 = and i64 %202, 1
  %204 = and i64 %202, -4
  %205 = inttoptr i64 %204 to ptr
  %206 = and i64 %202, -3
  %207 = inttoptr i64 %206 to ptr
  %208 = getelementptr i8, ptr %177, i64 48
  store ptr %207, ptr %208, align 8, !tbaa !21
  %209 = or disjoint i64 %203, 6
  %210 = getelementptr inbounds ptr, ptr %205, i64 %209
  store ptr %198, ptr %210, align 8, !tbaa !21
  call void @triangledealloc(ptr noundef nonnull %0, ptr noundef %182)
  br label %211

211:                                              ; preds = %172, %118
  %212 = load ptr, ptr %4, align 8, !tbaa !5
  %213 = getelementptr inbounds i8, ptr %212, i64 8
  store ptr null, ptr %213, align 8, !tbaa !19
  br label %215

214:                                              ; preds = %116
  call void @unflip(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %3)
  br label %215

215:                                              ; preds = %211, %214, %19
  %216 = load ptr, ptr %4, align 8, !tbaa !5
  %217 = getelementptr inbounds i8, ptr %216, i64 8
  %218 = load ptr, ptr %217, align 8, !tbaa !19
  store ptr %218, ptr %4, align 8, !tbaa !5
  %.not = icmp eq ptr %218, null
  br i1 %.not, label %._crit_edge, label %8, !llvm.loop !23

._crit_edge:                                      ; preds = %215, %2
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #2
  ret void
}

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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, !8, i64 82632}
!6 = !{!"mesh", !7, i64 0, !7, i64 88, !7, i64 176, !7, i64 264, !7, i64 352, !7, i64 440, !7, i64 528, !7, i64 616, !9, i64 704, !9, i64 33472, !9, i64 66240, !11, i64 82624, !8, i64 82632, !13, i64 82640, !13, i64 82648, !13, i64 82656, !13, i64 82664, !13, i64 82672, !11, i64 82680, !11, i64 82684, !11, i64 82688, !11, i64 82692, !11, i64 82696, !11, i64 82700, !12, i64 82704, !11, i64 82712, !11, i64 82716, !11, i64 82720, !12, i64 82728, !11, i64 82736, !11, i64 82740, !11, i64 82744, !11, i64 82748, !11, i64 82752, !11, i64 82756, !11, i64 82760, !11, i64 82764, !11, i64 82768, !12, i64 82776, !12, i64 82784, !12, i64 82792, !12, i64 82800, !12, i64 82808, !12, i64 82816, !12, i64 82824, !8, i64 82832, !8, i64 82840, !8, i64 82848, !8, i64 82856, !8, i64 82864, !8, i64 82872, !8, i64 82880, !14, i64 82888}
!7 = !{!"memorypool", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !12, i64 64, !12, i64 72, !11, i64 80, !11, i64 84}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"long", !9, i64 0}
!13 = !{!"double", !9, i64 0}
!14 = !{!"otri", !8, i64 0, !11, i64 8}
!15 = !{!16, !8, i64 0}
!16 = !{!"flipstacker", !8, i64 0, !8, i64 8}
!17 = !{!14, !11, i64 8}
!18 = !{!14, !8, i64 0}
!19 = !{!16, !8, i64 8}
!20 = !{!11, !11, i64 0}
!21 = !{!8, !8, i64 0}
!22 = !{!6, !8, i64 82856}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass