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

@plus1mod3 = external dso_local global [3 x i32], align 4
@minus1mod3 = external dso_local global [3 x i32], align 4
@.str.1027 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1028 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.1029 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1030 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1031 = external hidden unnamed_addr constant [36 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 @poolrestart(ptr noundef) #2

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @plague(ptr noundef %0, ptr noundef %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.otri, align 8
  %6 = alloca %struct.otri, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %struct.osub, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = 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) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %19 = load ptr, ptr %4, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.behavior, ptr %19, i32 0, i32 29
  %21 = load i32, ptr %20, align 4, !tbaa !9
  %22 = icmp ne i32 %21, 0
  br i1 %22, label %23, label %25

23:                                               ; preds = %2
  %24 = call i32 (ptr, ...) @printf(ptr noundef @.str.1027)
  br label %25

25:                                               ; preds = %23, %2
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.mesh, ptr %26, i32 0, i32 3
  call void @traversalinit(ptr noundef %27)
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.mesh, ptr %28, i32 0, i32 3
  %30 = call ptr @traverse(ptr noundef %29)
  store ptr %30, ptr %7, align 8, !tbaa !5
  br label %31

31:                                               ; preds = %372, %25
  %32 = load ptr, ptr %7, align 8, !tbaa !5
  %33 = icmp ne ptr %32, null
  br i1 %33, label %34, label %386

34:                                               ; preds = %31
  %35 = load ptr, ptr %7, align 8, !tbaa !5
  %36 = load ptr, ptr %35, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  store ptr %36, ptr %37, align 8, !tbaa !13
  %38 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !13
  %40 = getelementptr inbounds ptr, ptr %39, i64 6
  %41 = load ptr, ptr %40, align 8, !tbaa !5
  %42 = ptrtoint ptr %41 to i64
  %43 = and i64 %42, -3
  %44 = inttoptr i64 %43 to ptr
  %45 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %46 = load ptr, ptr %45, align 8, !tbaa !13
  %47 = getelementptr inbounds ptr, ptr %46, i64 6
  store ptr %44, ptr %47, align 8, !tbaa !5
  %48 = load ptr, ptr %4, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.behavior, ptr %48, i32 0, i32 29
  %50 = load i32, ptr %49, align 4, !tbaa !9
  %51 = icmp sgt i32 %50, 2
  br i1 %51, label %52, label %103

52:                                               ; preds = %34
  %53 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  store i32 0, ptr %53, align 8, !tbaa !15
  %54 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %55 = load ptr, ptr %54, align 8, !tbaa !13
  %56 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %57 = load i32, ptr %56, align 8, !tbaa !15
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %58
  %60 = load i32, ptr %59, align 4, !tbaa !16
  %61 = add nsw i32 %60, 3
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds ptr, ptr %55, i64 %62
  %64 = load ptr, ptr %63, align 8, !tbaa !5
  store ptr %64, ptr %13, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %66 = load ptr, ptr %65, align 8, !tbaa !13
  %67 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %68 = load i32, ptr %67, align 8, !tbaa !15
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %69
  %71 = load i32, ptr %70, align 4, !tbaa !16
  %72 = add nsw i32 %71, 3
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds ptr, ptr %66, i64 %73
  %75 = load ptr, ptr %74, align 8, !tbaa !5
  store ptr %75, ptr %14, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %77 = load ptr, ptr %76, align 8, !tbaa !13
  %78 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %79 = load i32, ptr %78, align 8, !tbaa !15
  %80 = add nsw i32 %79, 3
  %81 = sext i32 %80 to i64
  %82 = getelementptr inbounds ptr, ptr %77, i64 %81
  %83 = load ptr, ptr %82, align 8, !tbaa !5
  store ptr %83, ptr %15, align 8, !tbaa !5
  %84 = load ptr, ptr %13, align 8, !tbaa !5
  %85 = getelementptr inbounds double, ptr %84, i64 0
  %86 = load double, ptr %85, align 8, !tbaa !17
  %87 = load ptr, ptr %13, align 8, !tbaa !5
  %88 = getelementptr inbounds double, ptr %87, i64 1
  %89 = load double, ptr %88, align 8, !tbaa !17
  %90 = load ptr, ptr %14, align 8, !tbaa !5
  %91 = getelementptr inbounds double, ptr %90, i64 0
  %92 = load double, ptr %91, align 8, !tbaa !17
  %93 = load ptr, ptr %14, align 8, !tbaa !5
  %94 = getelementptr inbounds double, ptr %93, i64 1
  %95 = load double, ptr %94, align 8, !tbaa !17
  %96 = load ptr, ptr %15, align 8, !tbaa !5
  %97 = getelementptr inbounds double, ptr %96, i64 0
  %98 = load double, ptr %97, align 8, !tbaa !17
  %99 = load ptr, ptr %15, align 8, !tbaa !5
  %100 = getelementptr inbounds double, ptr %99, i64 1
  %101 = load double, ptr %100, align 8, !tbaa !17
  %102 = call i32 (ptr, ...) @printf(ptr noundef @.str.1028, double noundef %86, double noundef %89, double noundef %92, double noundef %95, double noundef %98, double noundef %101)
  br label %103

103:                                              ; preds = %52, %34
  %104 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  store i32 0, ptr %104, align 8, !tbaa !15
  br label %105

105:                                              ; preds = %368, %103
  %106 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %107 = load i32, ptr %106, align 8, !tbaa !15
  %108 = icmp slt i32 %107, 3
  br i1 %108, label %109, label %372

109:                                              ; preds = %105
  %110 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %111 = load ptr, ptr %110, align 8, !tbaa !13
  %112 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %113 = load i32, ptr %112, align 8, !tbaa !15
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds ptr, ptr %111, i64 %114
  %116 = load ptr, ptr %115, align 8, !tbaa !5
  store ptr %116, ptr %17, align 8, !tbaa !5
  %117 = load ptr, ptr %17, align 8, !tbaa !5
  %118 = ptrtoint ptr %117 to i64
  %119 = and i64 %118, 3
  %120 = trunc i64 %119 to i32
  %121 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %120, ptr %121, align 8, !tbaa !15
  %122 = load ptr, ptr %17, align 8, !tbaa !5
  %123 = ptrtoint ptr %122 to i64
  %124 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %125 = load i32, ptr %124, align 8, !tbaa !15
  %126 = sext i32 %125 to i64
  %127 = xor i64 %123, %126
  %128 = inttoptr i64 %127 to ptr
  %129 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %128, ptr %129, align 8, !tbaa !13
  %130 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %131 = load ptr, ptr %130, align 8, !tbaa !13
  %132 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %133 = load i32, ptr %132, align 8, !tbaa !15
  %134 = add nsw i32 6, %133
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds ptr, ptr %131, i64 %135
  %137 = load ptr, ptr %136, align 8, !tbaa !5
  store ptr %137, ptr %18, align 8, !tbaa !5
  %138 = load ptr, ptr %18, align 8, !tbaa !5
  %139 = ptrtoint ptr %138 to i64
  %140 = and i64 %139, 1
  %141 = trunc i64 %140 to i32
  %142 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 1
  store i32 %141, ptr %142, align 8, !tbaa !18
  %143 = load ptr, ptr %18, align 8, !tbaa !5
  %144 = ptrtoint ptr %143 to i64
  %145 = and i64 %144, -4
  %146 = inttoptr i64 %145 to ptr
  %147 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 0
  store ptr %146, ptr %147, align 8, !tbaa !20
  %148 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %149 = load ptr, ptr %148, align 8, !tbaa !13
  %150 = load ptr, ptr %3, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.mesh, ptr %150, i32 0, i32 48
  %152 = load ptr, ptr %151, align 8, !tbaa !21
  %153 = icmp eq ptr %149, %152
  br i1 %153, label %162, label %154

154:                                              ; preds = %109
  %155 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %156 = load ptr, ptr %155, align 8, !tbaa !13
  %157 = getelementptr inbounds ptr, ptr %156, i64 6
  %158 = load ptr, ptr %157, align 8, !tbaa !5
  %159 = ptrtoint ptr %158 to i64
  %160 = and i64 %159, 2
  %161 = icmp ne i64 %160, 0
  br i1 %161, label %162, label %212

162:                                              ; preds = %154, %109
  %163 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 0
  %164 = load ptr, ptr %163, align 8, !tbaa !20
  %165 = load ptr, ptr %3, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.mesh, ptr %165, i32 0, i32 50
  %167 = load ptr, ptr %166, align 8, !tbaa !25
  %168 = icmp ne ptr %164, %167
  br i1 %168, label %169, label %211

169:                                              ; preds = %162
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 0
  %172 = load ptr, ptr %171, align 8, !tbaa !20
  call void @subsegdealloc(ptr noundef %170, ptr noundef %172)
  %173 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %174 = load ptr, ptr %173, align 8, !tbaa !13
  %175 = load ptr, ptr %3, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.mesh, ptr %175, i32 0, i32 48
  %177 = load ptr, ptr %176, align 8, !tbaa !21
  %178 = icmp ne ptr %174, %177
  br i1 %178, label %179, label %210

179:                                              ; preds = %169
  %180 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %181 = load ptr, ptr %180, align 8, !tbaa !13
  %182 = getelementptr inbounds ptr, ptr %181, i64 6
  %183 = load ptr, ptr %182, align 8, !tbaa !5
  %184 = ptrtoint ptr %183 to i64
  %185 = and i64 %184, -3
  %186 = inttoptr i64 %185 to ptr
  %187 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %188 = load ptr, ptr %187, align 8, !tbaa !13
  %189 = getelementptr inbounds ptr, ptr %188, i64 6
  store ptr %186, ptr %189, align 8, !tbaa !5
  %190 = load ptr, ptr %3, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.mesh, ptr %190, i32 0, i32 50
  %192 = load ptr, ptr %191, align 8, !tbaa !25
  %193 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %194 = load ptr, ptr %193, align 8, !tbaa !13
  %195 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %196 = load i32, ptr %195, align 8, !tbaa !15
  %197 = add nsw i32 6, %196
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds ptr, ptr %194, i64 %198
  store ptr %192, ptr %199, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %201 = load ptr, ptr %200, align 8, !tbaa !13
  %202 = getelementptr inbounds ptr, ptr %201, i64 6
  %203 = load ptr, ptr %202, align 8, !tbaa !5
  %204 = ptrtoint ptr %203 to i64
  %205 = or i64 %204, 2
  %206 = inttoptr i64 %205 to ptr
  %207 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %208 = load ptr, ptr %207, align 8, !tbaa !13
  %209 = getelementptr inbounds ptr, ptr %208, i64 6
  store ptr %206, ptr %209, align 8, !tbaa !5
  br label %210

210:                                              ; preds = %179, %169
  br label %211

211:                                              ; preds = %210, %162
  br label %367

212:                                              ; preds = %154
  %213 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 0
  %214 = load ptr, ptr %213, align 8, !tbaa !20
  %215 = load ptr, ptr %3, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.mesh, ptr %215, i32 0, i32 50
  %217 = load ptr, ptr %216, align 8, !tbaa !25
  %218 = icmp eq ptr %214, %217
  br i1 %218, label %219, label %291

219:                                              ; preds = %212
  %220 = load ptr, ptr %4, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.behavior, ptr %220, i32 0, i32 29
  %222 = load i32, ptr %221, align 4, !tbaa !9
  %223 = icmp sgt i32 %222, 2
  br i1 %223, label %224, label %274

224:                                              ; preds = %219
  %225 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %226 = load ptr, ptr %225, align 8, !tbaa !13
  %227 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %228 = load i32, ptr %227, align 8, !tbaa !15
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %229
  %231 = load i32, ptr %230, align 4, !tbaa !16
  %232 = add nsw i32 %231, 3
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds ptr, ptr %226, i64 %233
  %235 = load ptr, ptr %234, align 8, !tbaa !5
  store ptr %235, ptr %13, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %237 = load ptr, ptr %236, align 8, !tbaa !13
  %238 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %239 = load i32, ptr %238, align 8, !tbaa !15
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !16
  %243 = add nsw i32 %242, 3
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds ptr, ptr %237, i64 %244
  %246 = load ptr, ptr %245, align 8, !tbaa !5
  store ptr %246, ptr %14, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %248 = load ptr, ptr %247, align 8, !tbaa !13
  %249 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %250 = load i32, ptr %249, align 8, !tbaa !15
  %251 = add nsw i32 %250, 3
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds ptr, ptr %248, i64 %252
  %254 = load ptr, ptr %253, align 8, !tbaa !5
  store ptr %254, ptr %15, align 8, !tbaa !5
  %255 = load ptr, ptr %13, align 8, !tbaa !5
  %256 = getelementptr inbounds double, ptr %255, i64 0
  %257 = load double, ptr %256, align 8, !tbaa !17
  %258 = load ptr, ptr %13, align 8, !tbaa !5
  %259 = getelementptr inbounds double, ptr %258, i64 1
  %260 = load double, ptr %259, align 8, !tbaa !17
  %261 = load ptr, ptr %14, align 8, !tbaa !5
  %262 = getelementptr inbounds double, ptr %261, i64 0
  %263 = load double, ptr %262, align 8, !tbaa !17
  %264 = load ptr, ptr %14, align 8, !tbaa !5
  %265 = getelementptr inbounds double, ptr %264, i64 1
  %266 = load double, ptr %265, align 8, !tbaa !17
  %267 = load ptr, ptr %15, align 8, !tbaa !5
  %268 = getelementptr inbounds double, ptr %267, i64 0
  %269 = load double, ptr %268, align 8, !tbaa !17
  %270 = load ptr, ptr %15, align 8, !tbaa !5
  %271 = getelementptr inbounds double, ptr %270, i64 1
  %272 = load double, ptr %271, align 8, !tbaa !17
  %273 = call i32 (ptr, ...) @printf(ptr noundef @.str.1029, double noundef %257, double noundef %260, double noundef %263, double noundef %266, double noundef %269, double noundef %272)
  br label %274

274:                                              ; preds = %224, %219
  %275 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %276 = load ptr, ptr %275, align 8, !tbaa !13
  %277 = getelementptr inbounds ptr, ptr %276, i64 6
  %278 = load ptr, ptr %277, align 8, !tbaa !5
  %279 = ptrtoint ptr %278 to i64
  %280 = or i64 %279, 2
  %281 = inttoptr i64 %280 to ptr
  %282 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %283 = load ptr, ptr %282, align 8, !tbaa !13
  %284 = getelementptr inbounds ptr, ptr %283, i64 6
  store ptr %281, ptr %284, align 8, !tbaa !5
  %285 = load ptr, ptr %3, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.mesh, ptr %285, i32 0, i32 3
  %287 = call ptr @poolalloc(ptr noundef %286)
  store ptr %287, ptr %8, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %289 = load ptr, ptr %288, align 8, !tbaa !13
  %290 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %289, ptr %290, align 8, !tbaa !5
  br label %366

291:                                              ; preds = %212
  %292 = load ptr, ptr %3, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.mesh, ptr %292, i32 0, i32 48
  %294 = load ptr, ptr %293, align 8, !tbaa !21
  %295 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 0
  %296 = load ptr, ptr %295, align 8, !tbaa !20
  %297 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 1
  %298 = load i32, ptr %297, align 8, !tbaa !18
  %299 = add nsw i32 6, %298
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds ptr, ptr %296, i64 %300
  store ptr %294, ptr %301, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 0
  %303 = load ptr, ptr %302, align 8, !tbaa !20
  %304 = getelementptr inbounds ptr, ptr %303, i64 8
  %305 = load i32, ptr %304, align 4, !tbaa !16
  %306 = icmp eq i32 %305, 0
  br i1 %306, label %307, label %311

307:                                              ; preds = %291
  %308 = getelementptr inbounds %struct.osub, ptr %9, i32 0, i32 0
  %309 = load ptr, ptr %308, align 8, !tbaa !20
  %310 = getelementptr inbounds ptr, ptr %309, i64 8
  store i32 1, ptr %310, align 4, !tbaa !16
  br label %311

311:                                              ; preds = %307, %291
  %312 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %313 = load ptr, ptr %312, align 8, !tbaa !13
  %314 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %315 = load i32, ptr %314, align 8, !tbaa !15
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !16
  %319 = add nsw i32 %318, 3
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds ptr, ptr %313, i64 %320
  %322 = load ptr, ptr %321, align 8, !tbaa !5
  store ptr %322, ptr %11, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %324 = load ptr, ptr %323, align 8, !tbaa !13
  %325 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %326 = load i32, ptr %325, align 8, !tbaa !15
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %327
  %329 = load i32, ptr %328, align 4, !tbaa !16
  %330 = add nsw i32 %329, 3
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds ptr, ptr %324, i64 %331
  %333 = load ptr, ptr %332, align 8, !tbaa !5
  store ptr %333, ptr %12, align 8, !tbaa !5
  %334 = load ptr, ptr %11, align 8, !tbaa !5
  %335 = load ptr, ptr %3, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.mesh, ptr %335, i32 0, i32 30
  %337 = load i32, ptr %336, align 4, !tbaa !26
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds i32, ptr %334, i64 %338
  %340 = load i32, ptr %339, align 4, !tbaa !16
  %341 = icmp eq i32 %340, 0
  br i1 %341, label %342, label %349

342:                                              ; preds = %311
  %343 = load ptr, ptr %11, align 8, !tbaa !5
  %344 = load ptr, ptr %3, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.mesh, ptr %344, i32 0, i32 30
  %346 = load i32, ptr %345, align 4, !tbaa !26
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i32, ptr %343, i64 %347
  store i32 1, ptr %348, align 4, !tbaa !16
  br label %349

349:                                              ; preds = %342, %311
  %350 = load ptr, ptr %12, align 8, !tbaa !5
  %351 = load ptr, ptr %3, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.mesh, ptr %351, i32 0, i32 30
  %353 = load i32, ptr %352, align 4, !tbaa !26
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i32, ptr %350, i64 %354
  %356 = load i32, ptr %355, align 4, !tbaa !16
  %357 = icmp eq i32 %356, 0
  br i1 %357, label %358, label %365

358:                                              ; preds = %349
  %359 = load ptr, ptr %12, align 8, !tbaa !5
  %360 = load ptr, ptr %3, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.mesh, ptr %360, i32 0, i32 30
  %362 = load i32, ptr %361, align 4, !tbaa !26
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds i32, ptr %359, i64 %363
  store i32 1, ptr %364, align 4, !tbaa !16
  br label %365

365:                                              ; preds = %358, %349
  br label %366

366:                                              ; preds = %365, %274
  br label %367

367:                                              ; preds = %366, %211
  br label %368

368:                                              ; preds = %367
  %369 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %370 = load i32, ptr %369, align 8, !tbaa !15
  %371 = add nsw i32 %370, 1
  store i32 %371, ptr %369, align 8, !tbaa !15
  br label %105, !llvm.loop !27

372:                                              ; preds = %105
  %373 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %374 = load ptr, ptr %373, align 8, !tbaa !13
  %375 = getelementptr inbounds ptr, ptr %374, i64 6
  %376 = load ptr, ptr %375, align 8, !tbaa !5
  %377 = ptrtoint ptr %376 to i64
  %378 = or i64 %377, 2
  %379 = inttoptr i64 %378 to ptr
  %380 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %381 = load ptr, ptr %380, align 8, !tbaa !13
  %382 = getelementptr inbounds ptr, ptr %381, i64 6
  store ptr %379, ptr %382, align 8, !tbaa !5
  %383 = load ptr, ptr %3, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.mesh, ptr %383, i32 0, i32 3
  %385 = call ptr @traverse(ptr noundef %384)
  store ptr %385, ptr %7, align 8, !tbaa !5
  br label %31, !llvm.loop !29

386:                                              ; preds = %31
  %387 = load ptr, ptr %4, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.behavior, ptr %387, i32 0, i32 29
  %389 = load i32, ptr %388, align 4, !tbaa !9
  %390 = icmp ne i32 %389, 0
  br i1 %390, label %391, label %393

391:                                              ; preds = %386
  %392 = call i32 (ptr, ...) @printf(ptr noundef @.str.1030)
  br label %393

393:                                              ; preds = %391, %386
  %394 = load ptr, ptr %3, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.mesh, ptr %394, i32 0, i32 3
  call void @traversalinit(ptr noundef %395)
  %396 = load ptr, ptr %3, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.mesh, ptr %396, i32 0, i32 3
  %398 = call ptr @traverse(ptr noundef %397)
  store ptr %398, ptr %7, align 8, !tbaa !5
  br label %399

399:                                              ; preds = %716, %393
  %400 = load ptr, ptr %7, align 8, !tbaa !5
  %401 = icmp ne ptr %400, null
  br i1 %401, label %402, label %723

402:                                              ; preds = %399
  %403 = load ptr, ptr %7, align 8, !tbaa !5
  %404 = load ptr, ptr %403, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  store ptr %404, ptr %405, align 8, !tbaa !13
  %406 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  store i32 0, ptr %406, align 8, !tbaa !15
  br label %407

407:                                              ; preds = %655, %402
  %408 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %409 = load i32, ptr %408, align 8, !tbaa !15
  %410 = icmp slt i32 %409, 3
  br i1 %410, label %411, label %659

411:                                              ; preds = %407
  %412 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %413 = load ptr, ptr %412, align 8, !tbaa !13
  %414 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %415 = load i32, ptr %414, align 8, !tbaa !15
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %416
  %418 = load i32, ptr %417, align 4, !tbaa !16
  %419 = add nsw i32 %418, 3
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds ptr, ptr %413, i64 %420
  %422 = load ptr, ptr %421, align 8, !tbaa !5
  store ptr %422, ptr %10, align 8, !tbaa !5
  %423 = load ptr, ptr %10, align 8, !tbaa !5
  %424 = icmp ne ptr %423, null
  br i1 %424, label %425, label %654

425:                                              ; preds = %411
  store i32 1, ptr %16, align 4, !tbaa !16
  %426 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %427 = load ptr, ptr %426, align 8, !tbaa !13
  %428 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %429 = load i32, ptr %428, align 8, !tbaa !15
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %430
  %432 = load i32, ptr %431, align 4, !tbaa !16
  %433 = add nsw i32 %432, 3
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds ptr, ptr %427, i64 %434
  store ptr null, ptr %435, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %437 = load ptr, ptr %436, align 8, !tbaa !13
  %438 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %437, ptr %438, align 8, !tbaa !13
  %439 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %440 = load i32, ptr %439, align 8, !tbaa !15
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %441
  %443 = load i32, ptr %442, align 4, !tbaa !16
  %444 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %443, ptr %444, align 8, !tbaa !15
  %445 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %446 = load ptr, ptr %445, align 8, !tbaa !13
  %447 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %448 = load i32, ptr %447, align 8, !tbaa !15
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds ptr, ptr %446, i64 %449
  %451 = load ptr, ptr %450, align 8, !tbaa !5
  store ptr %451, ptr %17, align 8, !tbaa !5
  %452 = load ptr, ptr %17, align 8, !tbaa !5
  %453 = ptrtoint ptr %452 to i64
  %454 = and i64 %453, 3
  %455 = trunc i64 %454 to i32
  %456 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %455, ptr %456, align 8, !tbaa !15
  %457 = load ptr, ptr %17, align 8, !tbaa !5
  %458 = ptrtoint ptr %457 to i64
  %459 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %460 = load i32, ptr %459, align 8, !tbaa !15
  %461 = sext i32 %460 to i64
  %462 = xor i64 %458, %461
  %463 = inttoptr i64 %462 to ptr
  %464 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %463, ptr %464, align 8, !tbaa !13
  br label %465

465:                                              ; preds = %509, %425
  %466 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %467 = load ptr, ptr %466, align 8, !tbaa !13
  %468 = load ptr, ptr %3, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.mesh, ptr %468, i32 0, i32 48
  %470 = load ptr, ptr %469, align 8, !tbaa !21
  %471 = icmp ne ptr %467, %470
  br i1 %471, label %472, label %487

472:                                              ; preds = %465
  %473 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %474 = load ptr, ptr %473, align 8, !tbaa !13
  %475 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %476 = load ptr, ptr %475, align 8, !tbaa !13
  %477 = icmp eq ptr %474, %476
  br i1 %477, label %478, label %484

478:                                              ; preds = %472
  %479 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %480 = load i32, ptr %479, align 8, !tbaa !15
  %481 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %482 = load i32, ptr %481, align 8, !tbaa !15
  %483 = icmp eq i32 %480, %482
  br label %484

484:                                              ; preds = %478, %472
  %485 = phi i1 [ false, %472 ], [ %483, %478 ]
  %486 = xor i1 %485, true
  br label %487

487:                                              ; preds = %484, %465
  %488 = phi i1 [ false, %465 ], [ %486, %484 ]
  br i1 %488, label %489, label %536

489:                                              ; preds = %487
  %490 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %491 = load ptr, ptr %490, align 8, !tbaa !13
  %492 = getelementptr inbounds ptr, ptr %491, i64 6
  %493 = load ptr, ptr %492, align 8, !tbaa !5
  %494 = ptrtoint ptr %493 to i64
  %495 = and i64 %494, 2
  %496 = icmp ne i64 %495, 0
  br i1 %496, label %497, label %508

497:                                              ; preds = %489
  %498 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %499 = load ptr, ptr %498, align 8, !tbaa !13
  %500 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %501 = load i32, ptr %500, align 8, !tbaa !15
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %502
  %504 = load i32, ptr %503, align 4, !tbaa !16
  %505 = add nsw i32 %504, 3
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds ptr, ptr %499, i64 %506
  store ptr null, ptr %507, align 8, !tbaa !5
  br label %509

508:                                              ; preds = %489
  store i32 0, ptr %16, align 4, !tbaa !16
  br label %509

509:                                              ; preds = %508, %497
  %510 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %511 = load i32, ptr %510, align 8, !tbaa !15
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %512
  %514 = load i32, ptr %513, align 4, !tbaa !16
  %515 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %514, ptr %515, align 8, !tbaa !15
  %516 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %517 = load ptr, ptr %516, align 8, !tbaa !13
  %518 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %519 = load i32, ptr %518, align 8, !tbaa !15
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds ptr, ptr %517, i64 %520
  %522 = load ptr, ptr %521, align 8, !tbaa !5
  store ptr %522, ptr %17, align 8, !tbaa !5
  %523 = load ptr, ptr %17, align 8, !tbaa !5
  %524 = ptrtoint ptr %523 to i64
  %525 = and i64 %524, 3
  %526 = trunc i64 %525 to i32
  %527 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %526, ptr %527, align 8, !tbaa !15
  %528 = load ptr, ptr %17, align 8, !tbaa !5
  %529 = ptrtoint ptr %528 to i64
  %530 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %531 = load i32, ptr %530, align 8, !tbaa !15
  %532 = sext i32 %531 to i64
  %533 = xor i64 %529, %532
  %534 = inttoptr i64 %533 to ptr
  %535 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %534, ptr %535, align 8, !tbaa !13
  br label %465, !llvm.loop !30

536:                                              ; preds = %487
  %537 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %538 = load ptr, ptr %537, align 8, !tbaa !13
  %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 !21
  %542 = icmp eq ptr %538, %541
  br i1 %542, label %543, label %625

543:                                              ; preds = %536
  %544 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %545 = load ptr, ptr %544, align 8, !tbaa !13
  %546 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %547 = load i32, ptr %546, align 8, !tbaa !15
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds ptr, ptr %545, i64 %548
  %550 = load ptr, ptr %549, align 8, !tbaa !5
  store ptr %550, ptr %17, align 8, !tbaa !5
  %551 = load ptr, ptr %17, align 8, !tbaa !5
  %552 = ptrtoint ptr %551 to i64
  %553 = and i64 %552, 3
  %554 = trunc i64 %553 to i32
  %555 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %554, ptr %555, align 8, !tbaa !15
  %556 = load ptr, ptr %17, align 8, !tbaa !5
  %557 = ptrtoint ptr %556 to i64
  %558 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %559 = load i32, ptr %558, align 8, !tbaa !15
  %560 = sext i32 %559 to i64
  %561 = xor i64 %557, %560
  %562 = inttoptr i64 %561 to ptr
  %563 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %562, ptr %563, align 8, !tbaa !13
  %564 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %565 = load i32, ptr %564, align 8, !tbaa !15
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %566
  %568 = load i32, ptr %567, align 4, !tbaa !16
  %569 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %568, ptr %569, align 8, !tbaa !15
  br label %570

570:                                              ; preds = %597, %543
  %571 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %572 = load ptr, ptr %571, align 8, !tbaa !13
  %573 = load ptr, ptr %3, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.mesh, ptr %573, i32 0, i32 48
  %575 = load ptr, ptr %574, align 8, !tbaa !21
  %576 = icmp ne ptr %572, %575
  br i1 %576, label %577, label %624

577:                                              ; preds = %570
  %578 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %579 = load ptr, ptr %578, align 8, !tbaa !13
  %580 = getelementptr inbounds ptr, ptr %579, i64 6
  %581 = load ptr, ptr %580, align 8, !tbaa !5
  %582 = ptrtoint ptr %581 to i64
  %583 = and i64 %582, 2
  %584 = icmp ne i64 %583, 0
  br i1 %584, label %585, label %596

585:                                              ; preds = %577
  %586 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %587 = load ptr, ptr %586, align 8, !tbaa !13
  %588 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %589 = load i32, ptr %588, align 8, !tbaa !15
  %590 = sext i32 %589 to i64
  %591 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %590
  %592 = load i32, ptr %591, align 4, !tbaa !16
  %593 = add nsw i32 %592, 3
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds ptr, ptr %587, i64 %594
  store ptr null, ptr %595, align 8, !tbaa !5
  br label %597

596:                                              ; preds = %577
  store i32 0, ptr %16, align 4, !tbaa !16
  br label %597

597:                                              ; preds = %596, %585
  %598 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %599 = load ptr, ptr %598, align 8, !tbaa !13
  %600 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %601 = load i32, ptr %600, align 8, !tbaa !15
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds ptr, ptr %599, i64 %602
  %604 = load ptr, ptr %603, align 8, !tbaa !5
  store ptr %604, ptr %17, align 8, !tbaa !5
  %605 = load ptr, ptr %17, align 8, !tbaa !5
  %606 = ptrtoint ptr %605 to i64
  %607 = and i64 %606, 3
  %608 = trunc i64 %607 to i32
  %609 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %608, ptr %609, align 8, !tbaa !15
  %610 = load ptr, ptr %17, align 8, !tbaa !5
  %611 = ptrtoint ptr %610 to i64
  %612 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %613 = load i32, ptr %612, align 8, !tbaa !15
  %614 = sext i32 %613 to i64
  %615 = xor i64 %611, %614
  %616 = inttoptr i64 %615 to ptr
  %617 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %616, ptr %617, align 8, !tbaa !13
  %618 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %619 = load i32, ptr %618, align 8, !tbaa !15
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %620
  %622 = load i32, ptr %621, align 4, !tbaa !16
  %623 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %622, ptr %623, align 8, !tbaa !15
  br label %570, !llvm.loop !31

624:                                              ; preds = %570
  br label %625

625:                                              ; preds = %624, %536
  %626 = load i32, ptr %16, align 4, !tbaa !16
  %627 = icmp ne i32 %626, 0
  br i1 %627, label %628, label %653

628:                                              ; preds = %625
  %629 = load ptr, ptr %4, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.behavior, ptr %629, i32 0, i32 29
  %631 = load i32, ptr %630, align 4, !tbaa !9
  %632 = icmp sgt i32 %631, 1
  br i1 %632, label %633, label %641

633:                                              ; preds = %628
  %634 = load ptr, ptr %10, align 8, !tbaa !5
  %635 = getelementptr inbounds double, ptr %634, i64 0
  %636 = load double, ptr %635, align 8, !tbaa !17
  %637 = load ptr, ptr %10, align 8, !tbaa !5
  %638 = getelementptr inbounds double, ptr %637, i64 1
  %639 = load double, ptr %638, align 8, !tbaa !17
  %640 = call i32 (ptr, ...) @printf(ptr noundef @.str.1031, double noundef %636, double noundef %639)
  br label %641

641:                                              ; preds = %633, %628
  %642 = load ptr, ptr %10, align 8, !tbaa !5
  %643 = load ptr, ptr %3, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.mesh, ptr %643, i32 0, i32 30
  %645 = load i32, ptr %644, align 4, !tbaa !26
  %646 = add nsw i32 %645, 1
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds i32, ptr %642, i64 %647
  store i32 -32767, ptr %648, align 4, !tbaa !16
  %649 = load ptr, ptr %3, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.mesh, ptr %649, i32 0, i32 23
  %651 = load i32, ptr %650, align 4, !tbaa !32
  %652 = add nsw i32 %651, 1
  store i32 %652, ptr %650, align 4, !tbaa !32
  br label %653

653:                                              ; preds = %641, %625
  br label %654

654:                                              ; preds = %653, %411
  br label %655

655:                                              ; preds = %654
  %656 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %657 = load i32, ptr %656, align 8, !tbaa !15
  %658 = add nsw i32 %657, 1
  store i32 %658, ptr %656, align 8, !tbaa !15
  br label %407, !llvm.loop !33

659:                                              ; preds = %407
  %660 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  store i32 0, ptr %660, align 8, !tbaa !15
  br label %661

661:                                              ; preds = %712, %659
  %662 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %663 = load i32, ptr %662, align 8, !tbaa !15
  %664 = icmp slt i32 %663, 3
  br i1 %664, label %665, label %716

665:                                              ; preds = %661
  %666 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %667 = load ptr, ptr %666, align 8, !tbaa !13
  %668 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %669 = load i32, ptr %668, align 8, !tbaa !15
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds ptr, ptr %667, i64 %670
  %672 = load ptr, ptr %671, align 8, !tbaa !5
  store ptr %672, ptr %17, align 8, !tbaa !5
  %673 = load ptr, ptr %17, align 8, !tbaa !5
  %674 = ptrtoint ptr %673 to i64
  %675 = and i64 %674, 3
  %676 = trunc i64 %675 to i32
  %677 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  store i32 %676, ptr %677, align 8, !tbaa !15
  %678 = load ptr, ptr %17, align 8, !tbaa !5
  %679 = ptrtoint ptr %678 to i64
  %680 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %681 = load i32, ptr %680, align 8, !tbaa !15
  %682 = sext i32 %681 to i64
  %683 = xor i64 %679, %682
  %684 = inttoptr i64 %683 to ptr
  %685 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  store ptr %684, ptr %685, align 8, !tbaa !13
  %686 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %687 = load ptr, ptr %686, align 8, !tbaa !13
  %688 = load ptr, ptr %3, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.mesh, ptr %688, i32 0, i32 48
  %690 = load ptr, ptr %689, align 8, !tbaa !21
  %691 = icmp eq ptr %687, %690
  br i1 %691, label %692, label %697

692:                                              ; preds = %665
  %693 = load ptr, ptr %3, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.mesh, ptr %693, i32 0, i32 28
  %695 = load i64, ptr %694, align 8, !tbaa !34
  %696 = add nsw i64 %695, -1
  store i64 %696, ptr %694, align 8, !tbaa !34
  br label %711

697:                                              ; preds = %665
  %698 = load ptr, ptr %3, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.mesh, ptr %698, i32 0, i32 48
  %700 = load ptr, ptr %699, align 8, !tbaa !21
  %701 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 0
  %702 = load ptr, ptr %701, align 8, !tbaa !13
  %703 = getelementptr inbounds %struct.otri, ptr %6, i32 0, i32 1
  %704 = load i32, ptr %703, align 8, !tbaa !15
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds ptr, ptr %702, i64 %705
  store ptr %700, ptr %706, align 8, !tbaa !5
  %707 = load ptr, ptr %3, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.mesh, ptr %707, i32 0, i32 28
  %709 = load i64, ptr %708, align 8, !tbaa !34
  %710 = add nsw i64 %709, 1
  store i64 %710, ptr %708, align 8, !tbaa !34
  br label %711

711:                                              ; preds = %697, %692
  br label %712

712:                                              ; preds = %711
  %713 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %714 = load i32, ptr %713, align 8, !tbaa !15
  %715 = add nsw i32 %714, 1
  store i32 %715, ptr %713, align 8, !tbaa !15
  br label %661, !llvm.loop !35

716:                                              ; preds = %661
  %717 = load ptr, ptr %3, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %719 = load ptr, ptr %718, align 8, !tbaa !13
  call void @triangledealloc(ptr noundef %717, ptr noundef %719)
  %720 = load ptr, ptr %3, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.mesh, ptr %720, i32 0, i32 3
  %722 = call ptr @traverse(ptr noundef %721)
  store ptr %722, ptr %7, align 8, !tbaa !5
  br label %399, !llvm.loop !36

723:                                              ; preds = %399
  %724 = load ptr, ptr %3, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.mesh, ptr %724, i32 0, i32 3
  call void @poolrestart(ptr noundef %725)
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #3
  ret void
}

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 }

!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, !11, i64 116}
!10 = !{!"behavior", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !12, i64 136, !12, i64 144, !12, i64 152, !12, 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}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"otri", !6, i64 0, !11, i64 8}
!15 = !{!14, !11, i64 8}
!16 = !{!11, !11, i64 0}
!17 = !{!12, !12, i64 0}
!18 = !{!19, !11, i64 8}
!19 = !{!"osub", !6, i64 0, !11, i64 8}
!20 = !{!19, !6, i64 0}
!21 = !{!22, !6, i64 82856}
!22 = !{!"mesh", !23, i64 0, !23, i64 88, !23, i64 176, !23, i64 264, !23, i64 352, !23, i64 440, !23, i64 528, !23, i64 616, !7, i64 704, !7, i64 33472, !7, i64 66240, !11, i64 82624, !6, i64 82632, !12, i64 82640, !12, i64 82648, !12, i64 82656, !12, i64 82664, !12, i64 82672, !11, i64 82680, !11, i64 82684, !11, i64 82688, !11, i64 82692, !11, i64 82696, !11, i64 82700, !24, i64 82704, !11, i64 82712, !11, i64 82716, !11, i64 82720, !24, 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, !24, i64 82776, !24, i64 82784, !24, i64 82792, !24, i64 82800, !24, i64 82808, !24, i64 82816, !24, i64 82824, !6, i64 82832, !6, i64 82840, !6, i64 82848, !6, i64 82856, !6, i64 82864, !6, i64 82872, !6, i64 82880, !14, i64 82888}
!23 = !{!"memorypool", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !24, i64 64, !24, i64 72, !11, i64 80, !11, i64 84}
!24 = !{!"long", !7, i64 0}
!25 = !{!22, !6, i64 82872}
!26 = !{!22, !11, i64 82740}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !28}
!32 = !{!22, !11, i64 82700}
!33 = distinct !{!33, !28}
!34 = !{!22, !24, i64 82728}
!35 = distinct !{!35, !28}
!36 = distinct !{!36, !28}


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

@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
@.str.1027 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1028 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.1029 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1030 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1031 = external hidden unnamed_addr constant [36 x i8], align 1

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

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

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

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

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

; 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 @subsegdealloc(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @plague(ptr noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #1 {
  %3 = getelementptr inbounds i8, ptr %1, i64 116
  %4 = load i32, ptr %3, align 4, !tbaa !5
  %.not = icmp eq i32 %4, 0
  br i1 %.not, label %7, label %5

5:                                                ; preds = %2
  %6 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1027)
  br label %7

7:                                                ; preds = %5, %2
  %8 = getelementptr inbounds i8, ptr %0, i64 264
  tail call void @traversalinit(ptr noundef nonnull %8)
  %9 = tail call ptr @traverse(ptr noundef nonnull %8)
  %.not170189 = icmp eq ptr %9, null
  br i1 %.not170189, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %7
  %10 = getelementptr inbounds i8, ptr %0, i64 82856
  %11 = getelementptr inbounds i8, ptr %0, i64 82872
  %12 = getelementptr inbounds i8, ptr %0, i64 82740
  br label %13

13:                                               ; preds = %.lr.ph, %353
  %.0160190 = phi ptr [ %9, %.lr.ph ], [ %358, %353 ]
  %14 = load ptr, ptr %.0160190, align 8, !tbaa !11
  %15 = getelementptr inbounds i8, ptr %14, i64 48
  %16 = load ptr, ptr %15, align 8, !tbaa !11
  %17 = ptrtoint ptr %16 to i64
  %18 = and i64 %17, -3
  %19 = inttoptr i64 %18 to ptr
  store ptr %19, ptr %15, align 8, !tbaa !11
  %20 = load i32, ptr %3, align 4, !tbaa !5
  %21 = icmp sgt i32 %20, 2
  br i1 %21, label %22, label %45

22:                                               ; preds = %13
  %23 = load i32, ptr @plus1mod3, align 4, !tbaa !13
  %24 = sext i32 %23 to i64
  %25 = getelementptr ptr, ptr %14, i64 %24
  %26 = getelementptr i8, ptr %25, i64 24
  %27 = load ptr, ptr %26, align 8, !tbaa !11
  %28 = load i32, ptr @minus1mod3, align 4, !tbaa !13
  %29 = sext i32 %28 to i64
  %30 = getelementptr ptr, ptr %14, i64 %29
  %31 = getelementptr i8, ptr %30, i64 24
  %32 = load ptr, ptr %31, align 8, !tbaa !11
  %33 = getelementptr inbounds i8, ptr %14, i64 24
  %34 = load ptr, ptr %33, align 8, !tbaa !11
  %35 = load double, ptr %27, align 8, !tbaa !14
  %36 = getelementptr inbounds i8, ptr %27, i64 8
  %37 = load double, ptr %36, align 8, !tbaa !14
  %38 = load double, ptr %32, align 8, !tbaa !14
  %39 = getelementptr inbounds i8, ptr %32, i64 8
  %40 = load double, ptr %39, align 8, !tbaa !14
  %41 = load double, ptr %34, align 8, !tbaa !14
  %42 = getelementptr inbounds i8, ptr %34, i64 8
  %43 = load double, ptr %42, align 8, !tbaa !14
  %44 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1028, double noundef %35, double noundef %37, double noundef %38, double noundef %40, double noundef %41, double noundef %43)
  %.pre = load ptr, ptr %15, align 8, !tbaa !11
  br label %45

45:                                               ; preds = %22, %13
  %46 = phi ptr [ %.pre, %22 ], [ %19, %13 ]
  %47 = load ptr, ptr %14, align 8, !tbaa !11
  %48 = ptrtoint ptr %47 to i64
  %49 = and i64 %48, 3
  %50 = and i64 %48, -4
  %51 = inttoptr i64 %50 to ptr
  %52 = ptrtoint ptr %46 to i64
  %53 = and i64 %52, 1
  %54 = and i64 %52, -4
  %55 = inttoptr i64 %54 to ptr
  %56 = load ptr, ptr %10, align 8, !tbaa !15
  %57 = icmp eq ptr %56, %51
  br i1 %57, label %63, label %58

58:                                               ; preds = %45
  %59 = getelementptr inbounds i8, ptr %51, i64 48
  %60 = load ptr, ptr %59, align 8, !tbaa !11
  %61 = ptrtoint ptr %60 to i64
  %62 = and i64 %61, 2
  %.not182 = icmp eq i64 %62, 0
  br i1 %.not182, label %80, label %63

63:                                               ; preds = %58, %45
  %64 = load ptr, ptr %11, align 8, !tbaa !20
  %.not183 = icmp eq ptr %64, %55
  br i1 %.not183, label %147, label %65

65:                                               ; preds = %63
  tail call void @subsegdealloc(ptr noundef nonnull %0, ptr noundef %55)
  %66 = load ptr, ptr %10, align 8, !tbaa !15
  %.not184 = icmp eq ptr %66, %51
  br i1 %.not184, label %147, label %67

67:                                               ; preds = %65
  %68 = getelementptr inbounds i8, ptr %51, i64 48
  %69 = load ptr, ptr %68, align 8, !tbaa !11
  %70 = ptrtoint ptr %69 to i64
  %71 = and i64 %70, -3
  %72 = inttoptr i64 %71 to ptr
  store ptr %72, ptr %68, align 8, !tbaa !11
  %73 = load ptr, ptr %11, align 8, !tbaa !20
  %74 = getelementptr inbounds ptr, ptr %51, i64 %49
  %75 = getelementptr inbounds i8, ptr %74, i64 48
  store ptr %73, ptr %75, align 8, !tbaa !11
  %76 = load ptr, ptr %68, align 8, !tbaa !11
  %77 = ptrtoint ptr %76 to i64
  %78 = or i64 %77, 2
  %79 = inttoptr i64 %78 to ptr
  store ptr %79, ptr %68, align 8, !tbaa !11
  br label %147

80:                                               ; preds = %58
  %81 = load ptr, ptr %11, align 8, !tbaa !20
  %82 = icmp eq ptr %81, %55
  br i1 %82, label %83, label %116

83:                                               ; preds = %80
  %84 = load i32, ptr %3, align 4, !tbaa !5
  %85 = icmp sgt i32 %84, 2
  br i1 %85, label %86, label %112

86:                                               ; preds = %83
  %87 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %49
  %88 = load i32, ptr %87, align 4, !tbaa !13
  %89 = sext i32 %88 to i64
  %90 = getelementptr ptr, ptr %51, i64 %89
  %91 = getelementptr i8, ptr %90, i64 24
  %92 = load ptr, ptr %91, align 8, !tbaa !11
  %93 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %49
  %94 = load i32, ptr %93, align 4, !tbaa !13
  %95 = sext i32 %94 to i64
  %96 = getelementptr ptr, ptr %51, i64 %95
  %97 = getelementptr i8, ptr %96, i64 24
  %98 = load ptr, ptr %97, align 8, !tbaa !11
  %99 = getelementptr inbounds ptr, ptr %51, i64 %49
  %100 = getelementptr inbounds i8, ptr %99, i64 24
  %101 = load ptr, ptr %100, align 8, !tbaa !11
  %102 = load double, ptr %92, align 8, !tbaa !14
  %103 = getelementptr inbounds i8, ptr %92, i64 8
  %104 = load double, ptr %103, align 8, !tbaa !14
  %105 = load double, ptr %98, align 8, !tbaa !14
  %106 = getelementptr inbounds i8, ptr %98, i64 8
  %107 = load double, ptr %106, align 8, !tbaa !14
  %108 = load double, ptr %101, align 8, !tbaa !14
  %109 = getelementptr inbounds i8, ptr %101, i64 8
  %110 = load double, ptr %109, align 8, !tbaa !14
  %111 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1029, double noundef %102, double noundef %104, double noundef %105, double noundef %107, double noundef %108, double noundef %110)
  %.pre231 = load ptr, ptr %59, align 8, !tbaa !11
  %.pre259 = ptrtoint ptr %.pre231 to i64
  br label %112

112:                                              ; preds = %86, %83
  %.pre-phi260 = phi i64 [ %.pre259, %86 ], [ %61, %83 ]
  %113 = or i64 %.pre-phi260, 2
  %114 = inttoptr i64 %113 to ptr
  store ptr %114, ptr %59, align 8, !tbaa !11
  %115 = tail call ptr @poolalloc(ptr noundef nonnull %8)
  store ptr %51, ptr %115, align 8, !tbaa !11
  br label %147

116:                                              ; preds = %80
  %117 = or disjoint i64 %53, 6
  %118 = getelementptr inbounds ptr, ptr %55, i64 %117
  store ptr %56, ptr %118, align 8, !tbaa !11
  %119 = getelementptr inbounds i8, ptr %55, i64 64
  %120 = load i32, ptr %119, align 4, !tbaa !13
  %121 = icmp eq i32 %120, 0
  br i1 %121, label %122, label %123

122:                                              ; preds = %116
  store i32 1, ptr %119, align 4, !tbaa !13
  br label %123

123:                                              ; preds = %122, %116
  %124 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %49
  %125 = load i32, ptr %124, align 4, !tbaa !13
  %126 = sext i32 %125 to i64
  %127 = getelementptr ptr, ptr %51, i64 %126
  %128 = getelementptr i8, ptr %127, i64 24
  %129 = load ptr, ptr %128, align 8, !tbaa !11
  %130 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %49
  %131 = load i32, ptr %130, align 4, !tbaa !13
  %132 = sext i32 %131 to i64
  %133 = getelementptr ptr, ptr %51, i64 %132
  %134 = getelementptr i8, ptr %133, i64 24
  %135 = load ptr, ptr %134, align 8, !tbaa !11
  %136 = load i32, ptr %12, align 4, !tbaa !21
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds i32, ptr %129, i64 %137
  %139 = load i32, ptr %138, align 4, !tbaa !13
  %140 = icmp eq i32 %139, 0
  br i1 %140, label %141, label %142

141:                                              ; preds = %123
  store i32 1, ptr %138, align 4, !tbaa !13
  %.pre230 = load i32, ptr %12, align 4, !tbaa !21
  %.pre250 = sext i32 %.pre230 to i64
  br label %142

142:                                              ; preds = %141, %123
  %.pre-phi = phi i64 [ %.pre250, %141 ], [ %137, %123 ]
  %143 = getelementptr inbounds i32, ptr %135, i64 %.pre-phi
  %144 = load i32, ptr %143, align 4, !tbaa !13
  %145 = icmp eq i32 %144, 0
  br i1 %145, label %146, label %147

146:                                              ; preds = %142
  store i32 1, ptr %143, align 4, !tbaa !13
  br label %147

147:                                              ; preds = %65, %67, %63, %142, %146, %112
  %148 = getelementptr inbounds i8, ptr %14, i64 8
  %149 = load ptr, ptr %148, align 8, !tbaa !11
  %150 = ptrtoint ptr %149 to i64
  %151 = and i64 %150, 3
  %152 = and i64 %150, -4
  %153 = inttoptr i64 %152 to ptr
  %154 = getelementptr inbounds i8, ptr %14, i64 56
  %155 = load ptr, ptr %154, align 8, !tbaa !11
  %156 = ptrtoint ptr %155 to i64
  %157 = and i64 %156, 1
  %158 = and i64 %156, -4
  %159 = inttoptr i64 %158 to ptr
  %160 = load ptr, ptr %10, align 8, !tbaa !15
  %161 = icmp eq ptr %160, %153
  br i1 %161, label %._crit_edge234, label %162

._crit_edge234:                                   ; preds = %147
  %.pre235 = load ptr, ptr %11, align 8, !tbaa !20
  br label %233

162:                                              ; preds = %147
  %163 = getelementptr inbounds i8, ptr %153, i64 48
  %164 = load ptr, ptr %163, align 8, !tbaa !11
  %165 = ptrtoint ptr %164 to i64
  %166 = and i64 %165, 2
  %.not182.1 = icmp eq i64 %166, 0
  %.pre236 = load ptr, ptr %11, align 8, !tbaa !20
  br i1 %.not182.1, label %167, label %233

167:                                              ; preds = %162
  %168 = icmp eq ptr %.pre236, %159
  br i1 %168, label %200, label %169

169:                                              ; preds = %167
  %170 = or disjoint i64 %157, 6
  %171 = getelementptr inbounds ptr, ptr %159, i64 %170
  store ptr %160, ptr %171, align 8, !tbaa !11
  %172 = getelementptr inbounds i8, ptr %159, i64 64
  %173 = load i32, ptr %172, align 4, !tbaa !13
  %174 = icmp eq i32 %173, 0
  br i1 %174, label %175, label %176

175:                                              ; preds = %169
  store i32 1, ptr %172, align 4, !tbaa !13
  br label %176

176:                                              ; preds = %175, %169
  %177 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %151
  %178 = load i32, ptr %177, align 4, !tbaa !13
  %179 = sext i32 %178 to i64
  %180 = getelementptr ptr, ptr %153, i64 %179
  %181 = getelementptr i8, ptr %180, i64 24
  %182 = load ptr, ptr %181, align 8, !tbaa !11
  %183 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %151
  %184 = load i32, ptr %183, align 4, !tbaa !13
  %185 = sext i32 %184 to i64
  %186 = getelementptr ptr, ptr %153, i64 %185
  %187 = getelementptr i8, ptr %186, i64 24
  %188 = load ptr, ptr %187, align 8, !tbaa !11
  %189 = load i32, ptr %12, align 4, !tbaa !21
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i32, ptr %182, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !13
  %193 = icmp eq i32 %192, 0
  br i1 %193, label %194, label %195

194:                                              ; preds = %176
  store i32 1, ptr %191, align 4, !tbaa !13
  %.pre232 = load i32, ptr %12, align 4, !tbaa !21
  %.pre251 = sext i32 %.pre232 to i64
  br label %195

195:                                              ; preds = %194, %176
  %.pre-phi252 = phi i64 [ %.pre251, %194 ], [ %190, %176 ]
  %196 = getelementptr inbounds i32, ptr %188, i64 %.pre-phi252
  %197 = load i32, ptr %196, align 4, !tbaa !13
  %198 = icmp eq i32 %197, 0
  br i1 %198, label %199, label %250

199:                                              ; preds = %195
  store i32 1, ptr %196, align 4, !tbaa !13
  br label %250

200:                                              ; preds = %167
  %201 = load i32, ptr %3, align 4, !tbaa !5
  %202 = icmp sgt i32 %201, 2
  br i1 %202, label %203, label %229

203:                                              ; preds = %200
  %204 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %151
  %205 = load i32, ptr %204, align 4, !tbaa !13
  %206 = sext i32 %205 to i64
  %207 = getelementptr ptr, ptr %153, i64 %206
  %208 = getelementptr i8, ptr %207, i64 24
  %209 = load ptr, ptr %208, align 8, !tbaa !11
  %210 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %151
  %211 = load i32, ptr %210, align 4, !tbaa !13
  %212 = sext i32 %211 to i64
  %213 = getelementptr ptr, ptr %153, i64 %212
  %214 = getelementptr i8, ptr %213, i64 24
  %215 = load ptr, ptr %214, align 8, !tbaa !11
  %216 = getelementptr inbounds ptr, ptr %153, i64 %151
  %217 = getelementptr inbounds i8, ptr %216, i64 24
  %218 = load ptr, ptr %217, align 8, !tbaa !11
  %219 = load double, ptr %209, align 8, !tbaa !14
  %220 = getelementptr inbounds i8, ptr %209, i64 8
  %221 = load double, ptr %220, align 8, !tbaa !14
  %222 = load double, ptr %215, align 8, !tbaa !14
  %223 = getelementptr inbounds i8, ptr %215, i64 8
  %224 = load double, ptr %223, align 8, !tbaa !14
  %225 = load double, ptr %218, align 8, !tbaa !14
  %226 = getelementptr inbounds i8, ptr %218, i64 8
  %227 = load double, ptr %226, align 8, !tbaa !14
  %228 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1029, double noundef %219, double noundef %221, double noundef %222, double noundef %224, double noundef %225, double noundef %227)
  %.pre233 = load ptr, ptr %163, align 8, !tbaa !11
  %.pre257 = ptrtoint ptr %.pre233 to i64
  br label %229

229:                                              ; preds = %203, %200
  %.pre-phi258 = phi i64 [ %.pre257, %203 ], [ %165, %200 ]
  %230 = or i64 %.pre-phi258, 2
  %231 = inttoptr i64 %230 to ptr
  store ptr %231, ptr %163, align 8, !tbaa !11
  %232 = tail call ptr @poolalloc(ptr noundef nonnull %8)
  store ptr %153, ptr %232, align 8, !tbaa !11
  br label %250

233:                                              ; preds = %._crit_edge234, %162
  %234 = phi ptr [ %.pre235, %._crit_edge234 ], [ %.pre236, %162 ]
  %.not183.1 = icmp eq ptr %234, %159
  br i1 %.not183.1, label %250, label %235

235:                                              ; preds = %233
  tail call void @subsegdealloc(ptr noundef nonnull %0, ptr noundef %159)
  %236 = load ptr, ptr %10, align 8, !tbaa !15
  %.not184.1 = icmp eq ptr %236, %153
  br i1 %.not184.1, label %250, label %237

237:                                              ; preds = %235
  %238 = getelementptr inbounds i8, ptr %153, i64 48
  %239 = load ptr, ptr %238, align 8, !tbaa !11
  %240 = ptrtoint ptr %239 to i64
  %241 = and i64 %240, -3
  %242 = inttoptr i64 %241 to ptr
  store ptr %242, ptr %238, align 8, !tbaa !11
  %243 = load ptr, ptr %11, align 8, !tbaa !20
  %244 = getelementptr inbounds ptr, ptr %153, i64 %151
  %245 = getelementptr inbounds i8, ptr %244, i64 48
  store ptr %243, ptr %245, align 8, !tbaa !11
  %246 = load ptr, ptr %238, align 8, !tbaa !11
  %247 = ptrtoint ptr %246 to i64
  %248 = or i64 %247, 2
  %249 = inttoptr i64 %248 to ptr
  store ptr %249, ptr %238, align 8, !tbaa !11
  br label %250

250:                                              ; preds = %237, %235, %233, %229, %199, %195
  %251 = getelementptr inbounds i8, ptr %14, i64 16
  %252 = load ptr, ptr %251, align 8, !tbaa !11
  %253 = ptrtoint ptr %252 to i64
  %254 = and i64 %253, 3
  %255 = and i64 %253, -4
  %256 = inttoptr i64 %255 to ptr
  %257 = getelementptr inbounds i8, ptr %14, i64 64
  %258 = load ptr, ptr %257, align 8, !tbaa !11
  %259 = ptrtoint ptr %258 to i64
  %260 = and i64 %259, 1
  %261 = and i64 %259, -4
  %262 = inttoptr i64 %261 to ptr
  %263 = load ptr, ptr %10, align 8, !tbaa !15
  %264 = icmp eq ptr %263, %256
  br i1 %264, label %._crit_edge239, label %265

._crit_edge239:                                   ; preds = %250
  %.pre240 = load ptr, ptr %11, align 8, !tbaa !20
  br label %336

265:                                              ; preds = %250
  %266 = getelementptr inbounds i8, ptr %256, i64 48
  %267 = load ptr, ptr %266, align 8, !tbaa !11
  %268 = ptrtoint ptr %267 to i64
  %269 = and i64 %268, 2
  %.not182.2 = icmp eq i64 %269, 0
  %.pre241 = load ptr, ptr %11, align 8, !tbaa !20
  br i1 %.not182.2, label %270, label %336

270:                                              ; preds = %265
  %271 = icmp eq ptr %.pre241, %262
  br i1 %271, label %303, label %272

272:                                              ; preds = %270
  %273 = or disjoint i64 %260, 6
  %274 = getelementptr inbounds ptr, ptr %262, i64 %273
  store ptr %263, ptr %274, align 8, !tbaa !11
  %275 = getelementptr inbounds i8, ptr %262, i64 64
  %276 = load i32, ptr %275, align 4, !tbaa !13
  %277 = icmp eq i32 %276, 0
  br i1 %277, label %278, label %279

278:                                              ; preds = %272
  store i32 1, ptr %275, align 4, !tbaa !13
  br label %279

279:                                              ; preds = %278, %272
  %280 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %254
  %281 = load i32, ptr %280, align 4, !tbaa !13
  %282 = sext i32 %281 to i64
  %283 = getelementptr ptr, ptr %256, i64 %282
  %284 = getelementptr i8, ptr %283, i64 24
  %285 = load ptr, ptr %284, align 8, !tbaa !11
  %286 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %254
  %287 = load i32, ptr %286, align 4, !tbaa !13
  %288 = sext i32 %287 to i64
  %289 = getelementptr ptr, ptr %256, i64 %288
  %290 = getelementptr i8, ptr %289, i64 24
  %291 = load ptr, ptr %290, align 8, !tbaa !11
  %292 = load i32, ptr %12, align 4, !tbaa !21
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i32, ptr %285, i64 %293
  %295 = load i32, ptr %294, align 4, !tbaa !13
  %296 = icmp eq i32 %295, 0
  br i1 %296, label %297, label %298

297:                                              ; preds = %279
  store i32 1, ptr %294, align 4, !tbaa !13
  %.pre237 = load i32, ptr %12, align 4, !tbaa !21
  %.pre253 = sext i32 %.pre237 to i64
  br label %298

298:                                              ; preds = %297, %279
  %.pre-phi254 = phi i64 [ %.pre253, %297 ], [ %293, %279 ]
  %299 = getelementptr inbounds i32, ptr %291, i64 %.pre-phi254
  %300 = load i32, ptr %299, align 4, !tbaa !13
  %301 = icmp eq i32 %300, 0
  br i1 %301, label %302, label %353

302:                                              ; preds = %298
  store i32 1, ptr %299, align 4, !tbaa !13
  br label %353

303:                                              ; preds = %270
  %304 = load i32, ptr %3, align 4, !tbaa !5
  %305 = icmp sgt i32 %304, 2
  br i1 %305, label %306, label %332

306:                                              ; preds = %303
  %307 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %254
  %308 = load i32, ptr %307, align 4, !tbaa !13
  %309 = sext i32 %308 to i64
  %310 = getelementptr ptr, ptr %256, i64 %309
  %311 = getelementptr i8, ptr %310, i64 24
  %312 = load ptr, ptr %311, align 8, !tbaa !11
  %313 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %254
  %314 = load i32, ptr %313, align 4, !tbaa !13
  %315 = sext i32 %314 to i64
  %316 = getelementptr ptr, ptr %256, i64 %315
  %317 = getelementptr i8, ptr %316, i64 24
  %318 = load ptr, ptr %317, align 8, !tbaa !11
  %319 = getelementptr inbounds ptr, ptr %256, i64 %254
  %320 = getelementptr inbounds i8, ptr %319, i64 24
  %321 = load ptr, ptr %320, align 8, !tbaa !11
  %322 = load double, ptr %312, align 8, !tbaa !14
  %323 = getelementptr inbounds i8, ptr %312, i64 8
  %324 = load double, ptr %323, align 8, !tbaa !14
  %325 = load double, ptr %318, align 8, !tbaa !14
  %326 = getelementptr inbounds i8, ptr %318, i64 8
  %327 = load double, ptr %326, align 8, !tbaa !14
  %328 = load double, ptr %321, align 8, !tbaa !14
  %329 = getelementptr inbounds i8, ptr %321, i64 8
  %330 = load double, ptr %329, align 8, !tbaa !14
  %331 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1029, double noundef %322, double noundef %324, double noundef %325, double noundef %327, double noundef %328, double noundef %330)
  %.pre238 = load ptr, ptr %266, align 8, !tbaa !11
  %.pre255 = ptrtoint ptr %.pre238 to i64
  br label %332

332:                                              ; preds = %306, %303
  %.pre-phi256 = phi i64 [ %.pre255, %306 ], [ %268, %303 ]
  %333 = or i64 %.pre-phi256, 2
  %334 = inttoptr i64 %333 to ptr
  store ptr %334, ptr %266, align 8, !tbaa !11
  %335 = tail call ptr @poolalloc(ptr noundef nonnull %8)
  store ptr %256, ptr %335, align 8, !tbaa !11
  br label %353

336:                                              ; preds = %._crit_edge239, %265
  %337 = phi ptr [ %.pre240, %._crit_edge239 ], [ %.pre241, %265 ]
  %.not183.2 = icmp eq ptr %337, %262
  br i1 %.not183.2, label %353, label %338

338:                                              ; preds = %336
  tail call void @subsegdealloc(ptr noundef nonnull %0, ptr noundef %262)
  %339 = load ptr, ptr %10, align 8, !tbaa !15
  %.not184.2 = icmp eq ptr %339, %256
  br i1 %.not184.2, label %353, label %340

340:                                              ; preds = %338
  %341 = getelementptr inbounds i8, ptr %256, i64 48
  %342 = load ptr, ptr %341, align 8, !tbaa !11
  %343 = ptrtoint ptr %342 to i64
  %344 = and i64 %343, -3
  %345 = inttoptr i64 %344 to ptr
  store ptr %345, ptr %341, align 8, !tbaa !11
  %346 = load ptr, ptr %11, align 8, !tbaa !20
  %347 = getelementptr inbounds ptr, ptr %256, i64 %254
  %348 = getelementptr inbounds i8, ptr %347, i64 48
  store ptr %346, ptr %348, align 8, !tbaa !11
  %349 = load ptr, ptr %341, align 8, !tbaa !11
  %350 = ptrtoint ptr %349 to i64
  %351 = or i64 %350, 2
  %352 = inttoptr i64 %351 to ptr
  store ptr %352, ptr %341, align 8, !tbaa !11
  br label %353

353:                                              ; preds = %340, %338, %336, %332, %302, %298
  %354 = load ptr, ptr %15, align 8, !tbaa !11
  %355 = ptrtoint ptr %354 to i64
  %356 = or i64 %355, 2
  %357 = inttoptr i64 %356 to ptr
  store ptr %357, ptr %15, align 8, !tbaa !11
  %358 = tail call ptr @traverse(ptr noundef nonnull %8)
  %.not170 = icmp eq ptr %358, null
  br i1 %.not170, label %._crit_edge, label %13, !llvm.loop !22

._crit_edge:                                      ; preds = %353, %7
  %359 = load i32, ptr %3, align 4, !tbaa !5
  %.not171 = icmp eq i32 %359, 0
  br i1 %.not171, label %362, label %360

360:                                              ; preds = %._crit_edge
  %361 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1030)
  br label %362

362:                                              ; preds = %360, %._crit_edge
  tail call void @traversalinit(ptr noundef nonnull %8)
  %363 = tail call ptr @traverse(ptr noundef nonnull %8)
  %.not172220 = icmp eq ptr %363, null
  br i1 %.not172220, label %._crit_edge224, label %.lr.ph223

.lr.ph223:                                        ; preds = %362
  %364 = getelementptr inbounds i8, ptr %0, i64 82856
  %365 = getelementptr inbounds i8, ptr %0, i64 82740
  %366 = getelementptr inbounds i8, ptr %0, i64 82700
  %367 = getelementptr inbounds i8, ptr %0, i64 82728
  br label %368

368:                                              ; preds = %.lr.ph223, %581
  %.1161221 = phi ptr [ %363, %.lr.ph223 ], [ %583, %581 ]
  %369 = load ptr, ptr %.1161221, align 8, !tbaa !11
  %invariant.gep = getelementptr i8, ptr %369, i64 24
  %370 = load i32, ptr @plus1mod3, align 4, !tbaa !13
  %371 = sext i32 %370 to i64
  %gep = getelementptr ptr, ptr %invariant.gep, i64 %371
  %372 = load ptr, ptr %gep, align 8, !tbaa !11
  %.not173 = icmp eq ptr %372, null
  br i1 %.not173, label %426, label %373

373:                                              ; preds = %368
  store ptr null, ptr %gep, align 8, !tbaa !11
  %374 = load i32, ptr @minus1mod3, align 4, !tbaa !13
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds ptr, ptr %369, i64 %375
  %.sroa.38.0.in.in.in191 = load ptr, ptr %376, align 8, !tbaa !11
  %.sroa.38.0.in.in192 = ptrtoint ptr %.sroa.38.0.in.in.in191 to i64
  %.sroa.044.0.in193 = and i64 %.sroa.38.0.in.in192, -4
  %.sroa.044.0194 = inttoptr i64 %.sroa.044.0.in193 to ptr
  %377 = load ptr, ptr %364, align 8, !tbaa !15
  %.not174195 = icmp eq ptr %377, %.sroa.044.0194
  br i1 %.not174195, label %._crit_edge201, label %.lr.ph200

.lr.ph200:                                        ; preds = %373, %._crit_edge261
  %378 = phi ptr [ %392, %._crit_edge261 ], [ %377, %373 ]
  %.sroa.044.0198 = phi ptr [ %.sroa.044.0, %._crit_edge261 ], [ %.sroa.044.0194, %373 ]
  %.sroa.38.0.in.in197 = phi i64 [ %.sroa.38.0.in.in, %._crit_edge261 ], [ %.sroa.38.0.in.in192, %373 ]
  %.0196 = phi i32 [ %.1, %._crit_edge261 ], [ 1, %373 ]
  %.sroa.38.0 = and i64 %.sroa.38.0.in.in197, 3
  %379 = icmp ne ptr %369, %.sroa.044.0198
  %380 = icmp ne i64 %.sroa.38.0, 0
  %.not177 = or i1 %379, %380
  br i1 %.not177, label %381, label %.critedge

381:                                              ; preds = %.lr.ph200
  %382 = getelementptr inbounds i8, ptr %.sroa.044.0198, i64 48
  %383 = load ptr, ptr %382, align 8, !tbaa !11
  %384 = ptrtoint ptr %383 to i64
  %385 = and i64 %384, 2
  %.not181 = icmp eq i64 %385, 0
  %.pre274 = and i64 %.sroa.38.0.in.in197, 3
  br i1 %.not181, label %._crit_edge261, label %386

386:                                              ; preds = %381
  %387 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pre274
  %388 = load i32, ptr %387, align 4, !tbaa !13
  %389 = sext i32 %388 to i64
  %390 = getelementptr ptr, ptr %.sroa.044.0198, i64 %389
  %391 = getelementptr i8, ptr %390, i64 24
  store ptr null, ptr %391, align 8, !tbaa !11
  %.pre242 = load ptr, ptr %364, align 8, !tbaa !15
  br label %._crit_edge261

._crit_edge261:                                   ; preds = %381, %386
  %392 = phi ptr [ %.pre242, %386 ], [ %378, %381 ]
  %.1 = phi i32 [ %.0196, %386 ], [ 0, %381 ]
  %393 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %.pre274
  %394 = load i32, ptr %393, align 4, !tbaa !13
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds ptr, ptr %.sroa.044.0198, i64 %395
  %.sroa.38.0.in.in.in = load ptr, ptr %396, align 8, !tbaa !11
  %.sroa.38.0.in.in = ptrtoint ptr %.sroa.38.0.in.in.in to i64
  %.sroa.044.0.in = and i64 %.sroa.38.0.in.in, -4
  %.sroa.044.0 = inttoptr i64 %.sroa.044.0.in to ptr
  %.not174 = icmp eq ptr %392, %.sroa.044.0
  br i1 %.not174, label %._crit_edge201, label %.lr.ph200, !llvm.loop !24

._crit_edge201:                                   ; preds = %._crit_edge261, %373
  %397 = phi ptr [ %.sroa.044.0194, %373 ], [ %392, %._crit_edge261 ]
  %.0.lcssa = phi i32 [ 1, %373 ], [ %.1, %._crit_edge261 ]
  %.pn.in.in202 = load ptr, ptr %369, align 8, !tbaa !11
  %.pn.in203 = ptrtoint ptr %.pn.in.in202 to i64
  %.sroa.044.1.in204 = and i64 %.pn.in203, -4
  %.sroa.044.1208 = inttoptr i64 %.sroa.044.1.in204 to ptr
  %.not178209 = icmp eq ptr %397, %.sroa.044.1208
  br i1 %.not178209, label %.critedge, label %.lr.ph214

.lr.ph214:                                        ; preds = %._crit_edge201, %.lr.ph214._crit_edge
  %398 = phi ptr [ %409, %.lr.ph214._crit_edge ], [ %397, %._crit_edge201 ]
  %.sroa.044.1212 = phi ptr [ %.sroa.044.1, %.lr.ph214._crit_edge ], [ %.sroa.044.1208, %._crit_edge201 ]
  %.pn.pn.in = phi i64 [ %.pn.in, %.lr.ph214._crit_edge ], [ %.pn.in203, %._crit_edge201 ]
  %.2210 = phi i32 [ %.3, %.lr.ph214._crit_edge ], [ %.0.lcssa, %._crit_edge201 ]
  %.pn.pn = and i64 %.pn.pn.in, 3
  %.sroa.38.1211.in = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pn.pn
  %.sroa.38.1211 = load i32, ptr %.sroa.38.1211.in, align 4, !tbaa !13
  %399 = getelementptr inbounds i8, ptr %.sroa.044.1212, i64 48
  %400 = load ptr, ptr %399, align 8, !tbaa !11
  %401 = ptrtoint ptr %400 to i64
  %402 = and i64 %401, 2
  %.not180 = icmp eq i64 %402, 0
  %.pre272 = sext i32 %.sroa.38.1211 to i64
  br i1 %.not180, label %.lr.ph214._crit_edge, label %403

403:                                              ; preds = %.lr.ph214
  %404 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pre272
  %405 = load i32, ptr %404, align 4, !tbaa !13
  %406 = sext i32 %405 to i64
  %407 = getelementptr ptr, ptr %.sroa.044.1212, i64 %406
  %408 = getelementptr i8, ptr %407, i64 24
  store ptr null, ptr %408, align 8, !tbaa !11
  %.pre243 = load ptr, ptr %364, align 8, !tbaa !15
  br label %.lr.ph214._crit_edge

.lr.ph214._crit_edge:                             ; preds = %.lr.ph214, %403
  %409 = phi ptr [ %.pre243, %403 ], [ %398, %.lr.ph214 ]
  %.3 = phi i32 [ %.2210, %403 ], [ 0, %.lr.ph214 ]
  %410 = getelementptr inbounds ptr, ptr %.sroa.044.1212, i64 %.pre272
  %.pn.in.in = load ptr, ptr %410, align 8, !tbaa !11
  %.pn.in = ptrtoint ptr %.pn.in.in to i64
  %.sroa.044.1.in = and i64 %.pn.in, -4
  %.sroa.044.1 = inttoptr i64 %.sroa.044.1.in to ptr
  %.not178 = icmp eq ptr %409, %.sroa.044.1
  br i1 %.not178, label %.critedge, label %.lr.ph214, !llvm.loop !25

.critedge:                                        ; preds = %.lr.ph200, %.lr.ph214._crit_edge, %._crit_edge201
  %.4 = phi i32 [ %.0.lcssa, %._crit_edge201 ], [ %.3, %.lr.ph214._crit_edge ], [ %.0196, %.lr.ph200 ]
  %.not179 = icmp eq i32 %.4, 0
  br i1 %.not179, label %426, label %411

411:                                              ; preds = %.critedge
  %412 = load i32, ptr %3, align 4, !tbaa !5
  %413 = icmp sgt i32 %412, 1
  br i1 %413, label %414, label %419

414:                                              ; preds = %411
  %415 = load double, ptr %372, align 8, !tbaa !14
  %416 = getelementptr inbounds i8, ptr %372, i64 8
  %417 = load double, ptr %416, align 8, !tbaa !14
  %418 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1031, double noundef %415, double noundef %417)
  br label %419

419:                                              ; preds = %414, %411
  %420 = load i32, ptr %365, align 4, !tbaa !21
  %421 = sext i32 %420 to i64
  %422 = getelementptr i32, ptr %372, i64 %421
  %423 = getelementptr i8, ptr %422, i64 4
  store i32 -32767, ptr %423, align 4, !tbaa !13
  %424 = load i32, ptr %366, align 4, !tbaa !26
  %425 = add nsw i32 %424, 1
  store i32 %425, ptr %366, align 4, !tbaa !26
  br label %426

426:                                              ; preds = %368, %419, %.critedge
  %427 = load i32, ptr getelementptr inbounds (i8, ptr @plus1mod3, i64 4), align 4, !tbaa !13
  %428 = sext i32 %427 to i64
  %gep.1 = getelementptr ptr, ptr %invariant.gep, i64 %428
  %429 = load ptr, ptr %gep.1, align 8, !tbaa !11
  %.not173.1 = icmp eq ptr %429, null
  br i1 %.not173.1, label %484, label %430

430:                                              ; preds = %426
  store ptr null, ptr %gep.1, align 8, !tbaa !11
  %431 = load i32, ptr getelementptr inbounds (i8, ptr @minus1mod3, i64 4), align 4, !tbaa !13
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds ptr, ptr %369, i64 %432
  %.sroa.38.0.in.in.in191.1 = load ptr, ptr %433, align 8, !tbaa !11
  %.sroa.38.0.in.in192.1 = ptrtoint ptr %.sroa.38.0.in.in.in191.1 to i64
  %.sroa.044.0.in193.1 = and i64 %.sroa.38.0.in.in192.1, -4
  %.sroa.044.0194.1 = inttoptr i64 %.sroa.044.0.in193.1 to ptr
  %434 = load ptr, ptr %364, align 8, !tbaa !15
  %.not174195.1 = icmp eq ptr %434, %.sroa.044.0194.1
  br i1 %.not174195.1, label %._crit_edge201.1, label %.lr.ph200.1

.lr.ph200.1:                                      ; preds = %430, %._crit_edge262
  %435 = phi ptr [ %449, %._crit_edge262 ], [ %434, %430 ]
  %.sroa.044.0198.1 = phi ptr [ %.sroa.044.0.1, %._crit_edge262 ], [ %.sroa.044.0194.1, %430 ]
  %.sroa.38.0.in.in197.1 = phi i64 [ %.sroa.38.0.in.in.1, %._crit_edge262 ], [ %.sroa.38.0.in.in192.1, %430 ]
  %.0196.1 = phi i32 [ %.1.1, %._crit_edge262 ], [ 1, %430 ]
  %.sroa.38.0.1 = and i64 %.sroa.38.0.in.in197.1, 3
  %436 = icmp ne ptr %369, %.sroa.044.0198.1
  %437 = icmp ne i64 %.sroa.38.0.1, 1
  %.not177.1 = or i1 %436, %437
  br i1 %.not177.1, label %438, label %.critedge.1

438:                                              ; preds = %.lr.ph200.1
  %439 = getelementptr inbounds i8, ptr %.sroa.044.0198.1, i64 48
  %440 = load ptr, ptr %439, align 8, !tbaa !11
  %441 = ptrtoint ptr %440 to i64
  %442 = and i64 %441, 2
  %.not181.1 = icmp eq i64 %442, 0
  %.pre270 = and i64 %.sroa.38.0.in.in197.1, 3
  br i1 %.not181.1, label %._crit_edge262, label %443

443:                                              ; preds = %438
  %444 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pre270
  %445 = load i32, ptr %444, align 4, !tbaa !13
  %446 = sext i32 %445 to i64
  %447 = getelementptr ptr, ptr %.sroa.044.0198.1, i64 %446
  %448 = getelementptr i8, ptr %447, i64 24
  store ptr null, ptr %448, align 8, !tbaa !11
  %.pre244 = load ptr, ptr %364, align 8, !tbaa !15
  br label %._crit_edge262

._crit_edge262:                                   ; preds = %438, %443
  %449 = phi ptr [ %.pre244, %443 ], [ %435, %438 ]
  %.1.1 = phi i32 [ %.0196.1, %443 ], [ 0, %438 ]
  %450 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %.pre270
  %451 = load i32, ptr %450, align 4, !tbaa !13
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds ptr, ptr %.sroa.044.0198.1, i64 %452
  %.sroa.38.0.in.in.in.1 = load ptr, ptr %453, align 8, !tbaa !11
  %.sroa.38.0.in.in.1 = ptrtoint ptr %.sroa.38.0.in.in.in.1 to i64
  %.sroa.044.0.in.1 = and i64 %.sroa.38.0.in.in.1, -4
  %.sroa.044.0.1 = inttoptr i64 %.sroa.044.0.in.1 to ptr
  %.not174.1 = icmp eq ptr %449, %.sroa.044.0.1
  br i1 %.not174.1, label %._crit_edge201.1, label %.lr.ph200.1, !llvm.loop !24

._crit_edge201.1:                                 ; preds = %._crit_edge262, %430
  %454 = phi ptr [ %.sroa.044.0194.1, %430 ], [ %449, %._crit_edge262 ]
  %.0.lcssa.1 = phi i32 [ 1, %430 ], [ %.1.1, %._crit_edge262 ]
  %455 = getelementptr inbounds i8, ptr %369, i64 8
  %.pn.in.in202.1 = load ptr, ptr %455, align 8, !tbaa !11
  %.pn.in203.1 = ptrtoint ptr %.pn.in.in202.1 to i64
  %.sroa.044.1.in204.1 = and i64 %.pn.in203.1, -4
  %.sroa.044.1208.1 = inttoptr i64 %.sroa.044.1.in204.1 to ptr
  %.not178209.1 = icmp eq ptr %454, %.sroa.044.1208.1
  br i1 %.not178209.1, label %.critedge.1, label %.lr.ph214.1

.lr.ph214.1:                                      ; preds = %._crit_edge201.1, %.lr.ph214.1._crit_edge
  %456 = phi ptr [ %467, %.lr.ph214.1._crit_edge ], [ %454, %._crit_edge201.1 ]
  %.sroa.044.1212.1 = phi ptr [ %.sroa.044.1.1, %.lr.ph214.1._crit_edge ], [ %.sroa.044.1208.1, %._crit_edge201.1 ]
  %.pn.pn.in.1 = phi i64 [ %.pn.in.1, %.lr.ph214.1._crit_edge ], [ %.pn.in203.1, %._crit_edge201.1 ]
  %.2210.1 = phi i32 [ %.3.1, %.lr.ph214.1._crit_edge ], [ %.0.lcssa.1, %._crit_edge201.1 ]
  %.pn.pn.1 = and i64 %.pn.pn.in.1, 3
  %.sroa.38.1211.in.1 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pn.pn.1
  %.sroa.38.1211.1 = load i32, ptr %.sroa.38.1211.in.1, align 4, !tbaa !13
  %457 = getelementptr inbounds i8, ptr %.sroa.044.1212.1, i64 48
  %458 = load ptr, ptr %457, align 8, !tbaa !11
  %459 = ptrtoint ptr %458 to i64
  %460 = and i64 %459, 2
  %.not180.1 = icmp eq i64 %460, 0
  %.pre268 = sext i32 %.sroa.38.1211.1 to i64
  br i1 %.not180.1, label %.lr.ph214.1._crit_edge, label %461

461:                                              ; preds = %.lr.ph214.1
  %462 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pre268
  %463 = load i32, ptr %462, align 4, !tbaa !13
  %464 = sext i32 %463 to i64
  %465 = getelementptr ptr, ptr %.sroa.044.1212.1, i64 %464
  %466 = getelementptr i8, ptr %465, i64 24
  store ptr null, ptr %466, align 8, !tbaa !11
  %.pre245 = load ptr, ptr %364, align 8, !tbaa !15
  br label %.lr.ph214.1._crit_edge

.lr.ph214.1._crit_edge:                           ; preds = %.lr.ph214.1, %461
  %467 = phi ptr [ %.pre245, %461 ], [ %456, %.lr.ph214.1 ]
  %.3.1 = phi i32 [ %.2210.1, %461 ], [ 0, %.lr.ph214.1 ]
  %468 = getelementptr inbounds ptr, ptr %.sroa.044.1212.1, i64 %.pre268
  %.pn.in.in.1 = load ptr, ptr %468, align 8, !tbaa !11
  %.pn.in.1 = ptrtoint ptr %.pn.in.in.1 to i64
  %.sroa.044.1.in.1 = and i64 %.pn.in.1, -4
  %.sroa.044.1.1 = inttoptr i64 %.sroa.044.1.in.1 to ptr
  %.not178.1 = icmp eq ptr %467, %.sroa.044.1.1
  br i1 %.not178.1, label %.critedge.1, label %.lr.ph214.1, !llvm.loop !25

.critedge.1:                                      ; preds = %.lr.ph200.1, %.lr.ph214.1._crit_edge, %._crit_edge201.1
  %.4.1 = phi i32 [ %.0.lcssa.1, %._crit_edge201.1 ], [ %.3.1, %.lr.ph214.1._crit_edge ], [ %.0196.1, %.lr.ph200.1 ]
  %.not179.1 = icmp eq i32 %.4.1, 0
  br i1 %.not179.1, label %484, label %469

469:                                              ; preds = %.critedge.1
  %470 = load i32, ptr %3, align 4, !tbaa !5
  %471 = icmp sgt i32 %470, 1
  br i1 %471, label %472, label %477

472:                                              ; preds = %469
  %473 = load double, ptr %429, align 8, !tbaa !14
  %474 = getelementptr inbounds i8, ptr %429, i64 8
  %475 = load double, ptr %474, align 8, !tbaa !14
  %476 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1031, double noundef %473, double noundef %475)
  br label %477

477:                                              ; preds = %472, %469
  %478 = load i32, ptr %365, align 4, !tbaa !21
  %479 = sext i32 %478 to i64
  %480 = getelementptr i32, ptr %429, i64 %479
  %481 = getelementptr i8, ptr %480, i64 4
  store i32 -32767, ptr %481, align 4, !tbaa !13
  %482 = load i32, ptr %366, align 4, !tbaa !26
  %483 = add nsw i32 %482, 1
  store i32 %483, ptr %366, align 4, !tbaa !26
  br label %484

484:                                              ; preds = %477, %.critedge.1, %426
  %485 = load i32, ptr getelementptr inbounds (i8, ptr @plus1mod3, i64 8), align 4, !tbaa !13
  %486 = sext i32 %485 to i64
  %gep.2 = getelementptr ptr, ptr %invariant.gep, i64 %486
  %487 = load ptr, ptr %gep.2, align 8, !tbaa !11
  %.not173.2 = icmp eq ptr %487, null
  br i1 %.not173.2, label %.preheader.preheader, label %488

488:                                              ; preds = %484
  store ptr null, ptr %gep.2, align 8, !tbaa !11
  %489 = load i32, ptr getelementptr inbounds (i8, ptr @minus1mod3, i64 8), align 4, !tbaa !13
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds ptr, ptr %369, i64 %490
  %.sroa.38.0.in.in.in191.2 = load ptr, ptr %491, align 8, !tbaa !11
  %.sroa.38.0.in.in192.2 = ptrtoint ptr %.sroa.38.0.in.in.in191.2 to i64
  %.sroa.044.0.in193.2 = and i64 %.sroa.38.0.in.in192.2, -4
  %.sroa.044.0194.2 = inttoptr i64 %.sroa.044.0.in193.2 to ptr
  %492 = load ptr, ptr %364, align 8, !tbaa !15
  %.not174195.2 = icmp eq ptr %492, %.sroa.044.0194.2
  br i1 %.not174195.2, label %._crit_edge201.2, label %.lr.ph200.2

.lr.ph200.2:                                      ; preds = %488, %._crit_edge263
  %493 = phi ptr [ %507, %._crit_edge263 ], [ %492, %488 ]
  %.sroa.044.0198.2 = phi ptr [ %.sroa.044.0.2, %._crit_edge263 ], [ %.sroa.044.0194.2, %488 ]
  %.sroa.38.0.in.in197.2 = phi i64 [ %.sroa.38.0.in.in.2, %._crit_edge263 ], [ %.sroa.38.0.in.in192.2, %488 ]
  %.0196.2 = phi i32 [ %.1.2, %._crit_edge263 ], [ 1, %488 ]
  %.sroa.38.0.2 = and i64 %.sroa.38.0.in.in197.2, 3
  %494 = icmp ne ptr %369, %.sroa.044.0198.2
  %495 = icmp ne i64 %.sroa.38.0.2, 2
  %.not177.2 = or i1 %494, %495
  br i1 %.not177.2, label %496, label %.critedge.2

496:                                              ; preds = %.lr.ph200.2
  %497 = getelementptr inbounds i8, ptr %.sroa.044.0198.2, i64 48
  %498 = load ptr, ptr %497, align 8, !tbaa !11
  %499 = ptrtoint ptr %498 to i64
  %500 = and i64 %499, 2
  %.not181.2 = icmp eq i64 %500, 0
  %.pre266 = and i64 %.sroa.38.0.in.in197.2, 3
  br i1 %.not181.2, label %._crit_edge263, label %501

501:                                              ; preds = %496
  %502 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pre266
  %503 = load i32, ptr %502, align 4, !tbaa !13
  %504 = sext i32 %503 to i64
  %505 = getelementptr ptr, ptr %.sroa.044.0198.2, i64 %504
  %506 = getelementptr i8, ptr %505, i64 24
  store ptr null, ptr %506, align 8, !tbaa !11
  %.pre246 = load ptr, ptr %364, align 8, !tbaa !15
  br label %._crit_edge263

._crit_edge263:                                   ; preds = %496, %501
  %507 = phi ptr [ %.pre246, %501 ], [ %493, %496 ]
  %.1.2 = phi i32 [ %.0196.2, %501 ], [ 0, %496 ]
  %508 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %.pre266
  %509 = load i32, ptr %508, align 4, !tbaa !13
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds ptr, ptr %.sroa.044.0198.2, i64 %510
  %.sroa.38.0.in.in.in.2 = load ptr, ptr %511, align 8, !tbaa !11
  %.sroa.38.0.in.in.2 = ptrtoint ptr %.sroa.38.0.in.in.in.2 to i64
  %.sroa.044.0.in.2 = and i64 %.sroa.38.0.in.in.2, -4
  %.sroa.044.0.2 = inttoptr i64 %.sroa.044.0.in.2 to ptr
  %.not174.2 = icmp eq ptr %507, %.sroa.044.0.2
  br i1 %.not174.2, label %._crit_edge201.2, label %.lr.ph200.2, !llvm.loop !24

._crit_edge201.2:                                 ; preds = %._crit_edge263, %488
  %512 = phi ptr [ %.sroa.044.0194.2, %488 ], [ %507, %._crit_edge263 ]
  %.0.lcssa.2 = phi i32 [ 1, %488 ], [ %.1.2, %._crit_edge263 ]
  %513 = getelementptr inbounds i8, ptr %369, i64 16
  %.pn.in.in202.2 = load ptr, ptr %513, align 8, !tbaa !11
  %.pn.in203.2 = ptrtoint ptr %.pn.in.in202.2 to i64
  %.sroa.044.1.in204.2 = and i64 %.pn.in203.2, -4
  %.sroa.044.1208.2 = inttoptr i64 %.sroa.044.1.in204.2 to ptr
  %.not178209.2 = icmp eq ptr %512, %.sroa.044.1208.2
  br i1 %.not178209.2, label %.critedge.2, label %.lr.ph214.2

.lr.ph214.2:                                      ; preds = %._crit_edge201.2, %.lr.ph214.2._crit_edge
  %514 = phi ptr [ %525, %.lr.ph214.2._crit_edge ], [ %512, %._crit_edge201.2 ]
  %.sroa.044.1212.2 = phi ptr [ %.sroa.044.1.2, %.lr.ph214.2._crit_edge ], [ %.sroa.044.1208.2, %._crit_edge201.2 ]
  %.pn.pn.in.2 = phi i64 [ %.pn.in.2, %.lr.ph214.2._crit_edge ], [ %.pn.in203.2, %._crit_edge201.2 ]
  %.2210.2 = phi i32 [ %.3.2, %.lr.ph214.2._crit_edge ], [ %.0.lcssa.2, %._crit_edge201.2 ]
  %.pn.pn.2 = and i64 %.pn.pn.in.2, 3
  %.sroa.38.1211.in.2 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pn.pn.2
  %.sroa.38.1211.2 = load i32, ptr %.sroa.38.1211.in.2, align 4, !tbaa !13
  %515 = getelementptr inbounds i8, ptr %.sroa.044.1212.2, i64 48
  %516 = load ptr, ptr %515, align 8, !tbaa !11
  %517 = ptrtoint ptr %516 to i64
  %518 = and i64 %517, 2
  %.not180.2 = icmp eq i64 %518, 0
  %.pre264 = sext i32 %.sroa.38.1211.2 to i64
  br i1 %.not180.2, label %.lr.ph214.2._crit_edge, label %519

519:                                              ; preds = %.lr.ph214.2
  %520 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %.pre264
  %521 = load i32, ptr %520, align 4, !tbaa !13
  %522 = sext i32 %521 to i64
  %523 = getelementptr ptr, ptr %.sroa.044.1212.2, i64 %522
  %524 = getelementptr i8, ptr %523, i64 24
  store ptr null, ptr %524, align 8, !tbaa !11
  %.pre247 = load ptr, ptr %364, align 8, !tbaa !15
  br label %.lr.ph214.2._crit_edge

.lr.ph214.2._crit_edge:                           ; preds = %.lr.ph214.2, %519
  %525 = phi ptr [ %.pre247, %519 ], [ %514, %.lr.ph214.2 ]
  %.3.2 = phi i32 [ %.2210.2, %519 ], [ 0, %.lr.ph214.2 ]
  %526 = getelementptr inbounds ptr, ptr %.sroa.044.1212.2, i64 %.pre264
  %.pn.in.in.2 = load ptr, ptr %526, align 8, !tbaa !11
  %.pn.in.2 = ptrtoint ptr %.pn.in.in.2 to i64
  %.sroa.044.1.in.2 = and i64 %.pn.in.2, -4
  %.sroa.044.1.2 = inttoptr i64 %.sroa.044.1.in.2 to ptr
  %.not178.2 = icmp eq ptr %525, %.sroa.044.1.2
  br i1 %.not178.2, label %.critedge.2, label %.lr.ph214.2, !llvm.loop !25

.critedge.2:                                      ; preds = %.lr.ph200.2, %.lr.ph214.2._crit_edge, %._crit_edge201.2
  %.4.2 = phi i32 [ %.0.lcssa.2, %._crit_edge201.2 ], [ %.3.2, %.lr.ph214.2._crit_edge ], [ %.0196.2, %.lr.ph200.2 ]
  %.not179.2 = icmp eq i32 %.4.2, 0
  br i1 %.not179.2, label %.preheader.preheader, label %527

527:                                              ; preds = %.critedge.2
  %528 = load i32, ptr %3, align 4, !tbaa !5
  %529 = icmp sgt i32 %528, 1
  br i1 %529, label %530, label %535

530:                                              ; preds = %527
  %531 = load double, ptr %487, align 8, !tbaa !14
  %532 = getelementptr inbounds i8, ptr %487, i64 8
  %533 = load double, ptr %532, align 8, !tbaa !14
  %534 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1031, double noundef %531, double noundef %533)
  br label %535

535:                                              ; preds = %530, %527
  %536 = load i32, ptr %365, align 4, !tbaa !21
  %537 = sext i32 %536 to i64
  %538 = getelementptr i32, ptr %487, i64 %537
  %539 = getelementptr i8, ptr %538, i64 4
  store i32 -32767, ptr %539, align 4, !tbaa !13
  %540 = load i32, ptr %366, align 4, !tbaa !26
  %541 = add nsw i32 %540, 1
  store i32 %541, ptr %366, align 4, !tbaa !26
  br label %.preheader.preheader

.preheader.preheader:                             ; preds = %535, %.critedge.2, %484
  %542 = load ptr, ptr %369, align 8, !tbaa !11
  %543 = ptrtoint ptr %542 to i64
  %544 = and i64 %543, -4
  %545 = inttoptr i64 %544 to ptr
  %546 = load ptr, ptr %364, align 8, !tbaa !15
  %547 = icmp eq ptr %546, %545
  br i1 %547, label %548, label %551

548:                                              ; preds = %.preheader.preheader
  %549 = load i64, ptr %367, align 8, !tbaa !27
  %550 = add nsw i64 %549, -1
  br label %.preheader.1

551:                                              ; preds = %.preheader.preheader
  %552 = and i64 %543, 3
  %553 = getelementptr inbounds ptr, ptr %545, i64 %552
  store ptr %546, ptr %553, align 8, !tbaa !11
  %554 = load i64, ptr %367, align 8, !tbaa !27
  %555 = add nsw i64 %554, 1
  %.pre248 = load ptr, ptr %364, align 8, !tbaa !15
  br label %.preheader.1

.preheader.1:                                     ; preds = %548, %551
  %556 = phi i64 [ %550, %548 ], [ %555, %551 ]
  %557 = phi ptr [ %546, %548 ], [ %.pre248, %551 ]
  %558 = getelementptr inbounds i8, ptr %369, i64 8
  %559 = load ptr, ptr %558, align 8, !tbaa !11
  %560 = ptrtoint ptr %559 to i64
  %561 = and i64 %560, -4
  %562 = inttoptr i64 %561 to ptr
  %563 = icmp eq ptr %557, %562
  br i1 %563, label %568, label %564

564:                                              ; preds = %.preheader.1
  %565 = and i64 %560, 3
  %566 = getelementptr inbounds ptr, ptr %562, i64 %565
  store ptr %557, ptr %566, align 8, !tbaa !11
  %567 = add nsw i64 %556, 1
  %.pre249 = load ptr, ptr %364, align 8, !tbaa !15
  br label %.preheader.2

568:                                              ; preds = %.preheader.1
  %569 = add nsw i64 %556, -1
  br label %.preheader.2

.preheader.2:                                     ; preds = %568, %564
  %570 = phi i64 [ %569, %568 ], [ %567, %564 ]
  %571 = phi ptr [ %557, %568 ], [ %.pre249, %564 ]
  %572 = getelementptr inbounds i8, ptr %369, i64 16
  %573 = load ptr, ptr %572, align 8, !tbaa !11
  %574 = ptrtoint ptr %573 to i64
  %575 = and i64 %574, -4
  %576 = inttoptr i64 %575 to ptr
  %577 = icmp eq ptr %571, %576
  br i1 %577, label %581, label %578

578:                                              ; preds = %.preheader.2
  %579 = and i64 %574, 3
  %580 = getelementptr inbounds ptr, ptr %576, i64 %579
  store ptr %571, ptr %580, align 8, !tbaa !11
  br label %581

581:                                              ; preds = %.preheader.2, %578
  %.sink = phi i64 [ 1, %578 ], [ -1, %.preheader.2 ]
  %582 = add nsw i64 %570, %.sink
  store i64 %582, ptr %367, align 8, !tbaa !27
  tail call void @triangledealloc(ptr noundef nonnull %0, ptr noundef nonnull %369)
  %583 = tail call ptr @traverse(ptr noundef nonnull %8)
  %.not172 = icmp eq ptr %583, null
  br i1 %.not172, label %._crit_edge224, label %368, !llvm.loop !28

._crit_edge224:                                   ; preds = %581, %362
  tail call void @poolrestart(ptr noundef nonnull %8)
  ret void
}

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

!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 116}
!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, !12, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!10, !10, i64 0}
!15 = !{!16, !12, i64 82856}
!16 = !{!"mesh", !17, i64 0, !17, i64 88, !17, i64 176, !17, i64 264, !17, i64 352, !17, i64 440, !17, i64 528, !17, i64 616, !8, i64 704, !8, i64 33472, !8, i64 66240, !7, i64 82624, !12, 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, !18, i64 82704, !7, i64 82712, !7, i64 82716, !7, i64 82720, !18, 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, !18, i64 82776, !18, i64 82784, !18, i64 82792, !18, i64 82800, !18, i64 82808, !18, i64 82816, !18, i64 82824, !12, i64 82832, !12, i64 82840, !12, i64 82848, !12, i64 82856, !12, i64 82864, !12, i64 82872, !12, i64 82880, !19, i64 82888}
!17 = !{!"memorypool", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !18, i64 64, !18, i64 72, !7, i64 80, !7, i64 84}
!18 = !{!"long", !8, i64 0}
!19 = !{!"otri", !12, i64 0, !7, i64 8}
!20 = !{!16, !12, i64 82872}
!21 = !{!16, !7, i64 82740}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = distinct !{!25, !23}
!26 = !{!16, !7, i64 82700}
!27 = !{!16, !18, i64 82728}
!28 = distinct !{!28, !23}


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