; 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.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.225 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1103 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1104 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1105 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1106 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.1107 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1108 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.1109 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.1110 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.1111 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.1112 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.1113 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1114 = external hidden unnamed_addr constant [61 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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

; 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, ...) #2

; Function Attrs: nounwind
declare double @cos(double noundef) #3

; Function Attrs: nounwind
declare double @sqrt(double noundef) #3

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @triangletraverse(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local double @counterclockwise(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
define dso_local void @quality_statistics(ptr noundef %0, ptr noundef %1) #4 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.otri, align 8
  %6 = alloca [3 x ptr], align 16
  %7 = alloca [8 x double], align 16
  %8 = alloca [16 x double], align 16
  %9 = alloca [3 x double], align 16
  %10 = alloca [3 x double], align 16
  %11 = alloca [3 x double], align 16
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca [18 x i32], align 16
  %29 = alloca [16 x i32], align 16
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  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) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 128, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 72, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %37 = call i32 (ptr, ...) @printf(ptr noundef @.str.1103)
  store double 0x3FC657184AE74487, ptr %26, align 8, !tbaa !9
  store double 0x404CA5DC1A63C1F8, ptr %27, align 8, !tbaa !9
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %38

38:                                               ; preds = %63, %2
  %39 = load i32, ptr %33, align 4, !tbaa !11
  %40 = icmp slt i32 %39, 8
  br i1 %40, label %41, label %66

41:                                               ; preds = %38
  %42 = load double, ptr %26, align 8, !tbaa !9
  %43 = load i32, ptr %33, align 4, !tbaa !11
  %44 = add nsw i32 %43, 1
  %45 = sitofp i32 %44 to double
  %46 = fmul double %42, %45
  %47 = call double @cos(double noundef %46) #5
  %48 = load i32, ptr %33, align 4, !tbaa !11
  %49 = sext i32 %48 to i64
  %50 = getelementptr inbounds [8 x double], ptr %7, i64 0, i64 %49
  store double %47, ptr %50, align 8, !tbaa !9
  %51 = load i32, ptr %33, align 4, !tbaa !11
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds [8 x double], ptr %7, i64 0, i64 %52
  %54 = load double, ptr %53, align 8, !tbaa !9
  %55 = load i32, ptr %33, align 4, !tbaa !11
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds [8 x double], ptr %7, i64 0, i64 %56
  %58 = load double, ptr %57, align 8, !tbaa !9
  %59 = fmul double %54, %58
  %60 = load i32, ptr %33, align 4, !tbaa !11
  %61 = sext i32 %60 to i64
  %62 = getelementptr inbounds [8 x double], ptr %7, i64 0, i64 %61
  store double %59, ptr %62, align 8, !tbaa !9
  br label %63

63:                                               ; preds = %41
  %64 = load i32, ptr %33, align 4, !tbaa !11
  %65 = add nsw i32 %64, 1
  store i32 %65, ptr %33, align 4, !tbaa !11
  br label %38, !llvm.loop !13

66:                                               ; preds = %38
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %67

67:                                               ; preds = %74, %66
  %68 = load i32, ptr %33, align 4, !tbaa !11
  %69 = icmp slt i32 %68, 18
  br i1 %69, label %70, label %77

70:                                               ; preds = %67
  %71 = load i32, ptr %33, align 4, !tbaa !11
  %72 = sext i32 %71 to i64
  %73 = getelementptr inbounds [18 x i32], ptr %28, i64 0, i64 %72
  store i32 0, ptr %73, align 4, !tbaa !11
  br label %74

74:                                               ; preds = %70
  %75 = load i32, ptr %33, align 4, !tbaa !11
  %76 = add nsw i32 %75, 1
  store i32 %76, ptr %33, align 4, !tbaa !11
  br label %67, !llvm.loop !15

77:                                               ; preds = %67
  %78 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 0
  store double 1.500000e+00, ptr %78, align 16, !tbaa !9
  %79 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 1
  store double 2.000000e+00, ptr %79, align 8, !tbaa !9
  %80 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 2
  store double 2.500000e+00, ptr %80, align 16, !tbaa !9
  %81 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 3
  store double 3.000000e+00, ptr %81, align 8, !tbaa !9
  %82 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 4
  store double 4.000000e+00, ptr %82, align 16, !tbaa !9
  %83 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 5
  store double 6.000000e+00, ptr %83, align 8, !tbaa !9
  %84 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 6
  store double 1.000000e+01, ptr %84, align 16, !tbaa !9
  %85 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 7
  store double 1.500000e+01, ptr %85, align 8, !tbaa !9
  %86 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 8
  store double 2.500000e+01, ptr %86, align 16, !tbaa !9
  %87 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 9
  store double 5.000000e+01, ptr %87, align 8, !tbaa !9
  %88 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 10
  store double 1.000000e+02, ptr %88, align 16, !tbaa !9
  %89 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 11
  store double 3.000000e+02, ptr %89, align 8, !tbaa !9
  %90 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 12
  store double 1.000000e+03, ptr %90, align 16, !tbaa !9
  %91 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 13
  store double 1.000000e+04, ptr %91, align 8, !tbaa !9
  %92 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 14
  store double 1.000000e+05, ptr %92, align 16, !tbaa !9
  %93 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 15
  store double 0.000000e+00, ptr %93, align 8, !tbaa !9
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %94

94:                                               ; preds = %101, %77
  %95 = load i32, ptr %33, align 4, !tbaa !11
  %96 = icmp slt i32 %95, 16
  br i1 %96, label %97, label %104

97:                                               ; preds = %94
  %98 = load i32, ptr %33, align 4, !tbaa !11
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds [16 x i32], ptr %29, i64 0, i64 %99
  store i32 0, ptr %100, align 4, !tbaa !11
  br label %101

101:                                              ; preds = %97
  %102 = load i32, ptr %33, align 4, !tbaa !11
  %103 = add nsw i32 %102, 1
  store i32 %103, ptr %33, align 4, !tbaa !11
  br label %94, !llvm.loop !16

104:                                              ; preds = %94
  store double 0.000000e+00, ptr %23, align 8, !tbaa !9
  %105 = load ptr, ptr %3, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.mesh, ptr %105, i32 0, i32 14
  %107 = load double, ptr %106, align 8, !tbaa !17
  %108 = load ptr, ptr %3, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.mesh, ptr %108, i32 0, i32 13
  %110 = load double, ptr %109, align 8, !tbaa !22
  %111 = fsub double %107, %110
  %112 = load ptr, ptr %3, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.mesh, ptr %112, i32 0, i32 16
  %114 = load double, ptr %113, align 8, !tbaa !23
  %115 = fadd double %111, %114
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.mesh, ptr %116, i32 0, i32 15
  %118 = load double, ptr %117, align 8, !tbaa !24
  %119 = fsub double %115, %118
  store double %119, ptr %21, align 8, !tbaa !9
  %120 = load double, ptr %21, align 8, !tbaa !9
  %121 = load double, ptr %21, align 8, !tbaa !9
  %122 = fmul double %120, %121
  store double %122, ptr %21, align 8, !tbaa !9
  %123 = load double, ptr %21, align 8, !tbaa !9
  store double %123, ptr %15, align 8, !tbaa !9
  store double 0.000000e+00, ptr %16, align 8, !tbaa !9
  %124 = load double, ptr %21, align 8, !tbaa !9
  store double %124, ptr %18, align 8, !tbaa !9
  store double 0.000000e+00, ptr %19, align 8, !tbaa !9
  store double 0.000000e+00, ptr %23, align 8, !tbaa !9
  store double 0.000000e+00, ptr %24, align 8, !tbaa !9
  store double 2.000000e+00, ptr %25, align 8, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !11
  %125 = load ptr, ptr %3, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.mesh, ptr %125, i32 0, i32 0
  call void @traversalinit(ptr noundef %126)
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  %128 = call ptr @triangletraverse(ptr noundef %127)
  %129 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  store ptr %128, ptr %129, align 8, !tbaa !25
  %130 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  store i32 0, ptr %130, align 8, !tbaa !26
  br label %131

131:                                              ; preds = %444, %104
  %132 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %133 = load ptr, ptr %132, align 8, !tbaa !25
  %134 = icmp ne ptr %133, null
  br i1 %134, label %135, label %448

135:                                              ; preds = %131
  %136 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %137 = load ptr, ptr %136, align 8, !tbaa !25
  %138 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %139 = load i32, ptr %138, align 8, !tbaa !26
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %140
  %142 = load i32, ptr %141, align 4, !tbaa !11
  %143 = add nsw i32 %142, 3
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds ptr, ptr %137, i64 %144
  %146 = load ptr, ptr %145, align 8, !tbaa !5
  %147 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 0
  store ptr %146, ptr %147, align 16, !tbaa !5
  %148 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %149 = load ptr, ptr %148, align 8, !tbaa !25
  %150 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %151 = load i32, ptr %150, align 8, !tbaa !26
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !11
  %155 = add nsw i32 %154, 3
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds ptr, ptr %149, i64 %156
  %158 = load ptr, ptr %157, align 8, !tbaa !5
  %159 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 1
  store ptr %158, ptr %159, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  %161 = load ptr, ptr %160, align 8, !tbaa !25
  %162 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 1
  %163 = load i32, ptr %162, align 8, !tbaa !26
  %164 = add nsw i32 %163, 3
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds ptr, ptr %161, i64 %165
  %167 = load ptr, ptr %166, align 8, !tbaa !5
  %168 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 2
  store ptr %167, ptr %168, align 16, !tbaa !5
  store double 0.000000e+00, ptr %17, align 8, !tbaa !9
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %169

169:                                              ; preds = %270, %135
  %170 = load i32, ptr %33, align 4, !tbaa !11
  %171 = icmp slt i32 %170, 3
  br i1 %171, label %172, label %273

172:                                              ; preds = %169
  %173 = load i32, ptr %33, align 4, !tbaa !11
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %174
  %176 = load i32, ptr %175, align 4, !tbaa !11
  store i32 %176, ptr %35, align 4, !tbaa !11
  %177 = load i32, ptr %33, align 4, !tbaa !11
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %178
  %180 = load i32, ptr %179, align 4, !tbaa !11
  store i32 %180, ptr %36, align 4, !tbaa !11
  %181 = load i32, ptr %35, align 4, !tbaa !11
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 %182
  %184 = load ptr, ptr %183, align 8, !tbaa !5
  %185 = getelementptr inbounds double, ptr %184, i64 0
  %186 = load double, ptr %185, align 8, !tbaa !9
  %187 = load i32, ptr %36, align 4, !tbaa !11
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 %188
  %190 = load ptr, ptr %189, align 8, !tbaa !5
  %191 = getelementptr inbounds double, ptr %190, i64 0
  %192 = load double, ptr %191, align 8, !tbaa !9
  %193 = fsub double %186, %192
  %194 = load i32, ptr %33, align 4, !tbaa !11
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 %195
  store double %193, ptr %196, align 8, !tbaa !9
  %197 = load i32, ptr %35, align 4, !tbaa !11
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 %198
  %200 = load ptr, ptr %199, align 8, !tbaa !5
  %201 = getelementptr inbounds double, ptr %200, i64 1
  %202 = load double, ptr %201, align 8, !tbaa !9
  %203 = load i32, ptr %36, align 4, !tbaa !11
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 %204
  %206 = load ptr, ptr %205, align 8, !tbaa !5
  %207 = getelementptr inbounds double, ptr %206, i64 1
  %208 = load double, ptr %207, align 8, !tbaa !9
  %209 = fsub double %202, %208
  %210 = load i32, ptr %33, align 4, !tbaa !11
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds [3 x double], ptr %10, i64 0, i64 %211
  store double %209, ptr %212, align 8, !tbaa !9
  %213 = load i32, ptr %33, align 4, !tbaa !11
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 %214
  %216 = load double, ptr %215, align 8, !tbaa !9
  %217 = load i32, ptr %33, align 4, !tbaa !11
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 %218
  %220 = load double, ptr %219, align 8, !tbaa !9
  %221 = load i32, ptr %33, align 4, !tbaa !11
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds [3 x double], ptr %10, i64 0, i64 %222
  %224 = load double, ptr %223, align 8, !tbaa !9
  %225 = load i32, ptr %33, align 4, !tbaa !11
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds [3 x double], ptr %10, i64 0, i64 %226
  %228 = load double, ptr %227, align 8, !tbaa !9
  %229 = fmul double %224, %228
  %230 = call double @llvm.fmuladd.f64(double %216, double %220, double %229)
  %231 = load i32, ptr %33, align 4, !tbaa !11
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %232
  store double %230, ptr %233, align 8, !tbaa !9
  %234 = load i32, ptr %33, align 4, !tbaa !11
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %235
  %237 = load double, ptr %236, align 8, !tbaa !9
  %238 = load double, ptr %17, align 8, !tbaa !9
  %239 = fcmp ogt double %237, %238
  br i1 %239, label %240, label %245

240:                                              ; preds = %172
  %241 = load i32, ptr %33, align 4, !tbaa !11
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %242
  %244 = load double, ptr %243, align 8, !tbaa !9
  store double %244, ptr %17, align 8, !tbaa !9
  br label %245

245:                                              ; preds = %240, %172
  %246 = load i32, ptr %33, align 4, !tbaa !11
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %247
  %249 = load double, ptr %248, align 8, !tbaa !9
  %250 = load double, ptr %16, align 8, !tbaa !9
  %251 = fcmp ogt double %249, %250
  br i1 %251, label %252, label %257

252:                                              ; preds = %245
  %253 = load i32, ptr %33, align 4, !tbaa !11
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %254
  %256 = load double, ptr %255, align 8, !tbaa !9
  store double %256, ptr %16, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %252, %245
  %258 = load i32, ptr %33, align 4, !tbaa !11
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %259
  %261 = load double, ptr %260, align 8, !tbaa !9
  %262 = load double, ptr %15, align 8, !tbaa !9
  %263 = fcmp olt double %261, %262
  br i1 %263, label %264, label %269

264:                                              ; preds = %257
  %265 = load i32, ptr %33, align 4, !tbaa !11
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %266
  %268 = load double, ptr %267, align 8, !tbaa !9
  store double %268, ptr %15, align 8, !tbaa !9
  br label %269

269:                                              ; preds = %264, %257
  br label %270

270:                                              ; preds = %269
  %271 = load i32, ptr %33, align 4, !tbaa !11
  %272 = add nsw i32 %271, 1
  store i32 %272, ptr %33, align 4, !tbaa !11
  br label %169, !llvm.loop !27

273:                                              ; preds = %169
  %274 = load ptr, ptr %3, align 8, !tbaa !5
  %275 = load ptr, ptr %4, align 8, !tbaa !5
  %276 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 0
  %277 = load ptr, ptr %276, align 16, !tbaa !5
  %278 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 1
  %279 = load ptr, ptr %278, align 8, !tbaa !5
  %280 = getelementptr inbounds [3 x ptr], ptr %6, i64 0, i64 2
  %281 = load ptr, ptr %280, align 16, !tbaa !5
  %282 = call double @counterclockwise(ptr noundef %274, ptr noundef %275, ptr noundef %277, ptr noundef %279, ptr noundef %281)
  store double %282, ptr %14, align 8, !tbaa !9
  %283 = load double, ptr %14, align 8, !tbaa !9
  %284 = load double, ptr %18, align 8, !tbaa !9
  %285 = fcmp olt double %283, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %273
  %287 = load double, ptr %14, align 8, !tbaa !9
  store double %287, ptr %18, align 8, !tbaa !9
  br label %288

288:                                              ; preds = %286, %273
  %289 = load double, ptr %14, align 8, !tbaa !9
  %290 = load double, ptr %19, align 8, !tbaa !9
  %291 = fcmp ogt double %289, %290
  br i1 %291, label %292, label %294

292:                                              ; preds = %288
  %293 = load double, ptr %14, align 8, !tbaa !9
  store double %293, ptr %19, align 8, !tbaa !9
  br label %294

294:                                              ; preds = %292, %288
  %295 = load double, ptr %14, align 8, !tbaa !9
  %296 = load double, ptr %14, align 8, !tbaa !9
  %297 = fmul double %295, %296
  %298 = load double, ptr %17, align 8, !tbaa !9
  %299 = fdiv double %297, %298
  store double %299, ptr %20, align 8, !tbaa !9
  %300 = load double, ptr %20, align 8, !tbaa !9
  %301 = load double, ptr %21, align 8, !tbaa !9
  %302 = fcmp olt double %300, %301
  br i1 %302, label %303, label %305

303:                                              ; preds = %294
  %304 = load double, ptr %20, align 8, !tbaa !9
  store double %304, ptr %21, align 8, !tbaa !9
  br label %305

305:                                              ; preds = %303, %294
  %306 = load double, ptr %17, align 8, !tbaa !9
  %307 = load double, ptr %20, align 8, !tbaa !9
  %308 = fdiv double %306, %307
  store double %308, ptr %22, align 8, !tbaa !9
  %309 = load double, ptr %22, align 8, !tbaa !9
  %310 = load double, ptr %23, align 8, !tbaa !9
  %311 = fcmp ogt double %309, %310
  br i1 %311, label %312, label %314

312:                                              ; preds = %305
  %313 = load double, ptr %22, align 8, !tbaa !9
  store double %313, ptr %23, align 8, !tbaa !9
  br label %314

314:                                              ; preds = %312, %305
  store i32 0, ptr %30, align 4, !tbaa !11
  br label %315

315:                                              ; preds = %332, %314
  %316 = load double, ptr %22, align 8, !tbaa !9
  %317 = load i32, ptr %30, align 4, !tbaa !11
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 %318
  %320 = load double, ptr %319, align 8, !tbaa !9
  %321 = load i32, ptr %30, align 4, !tbaa !11
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 %322
  %324 = load double, ptr %323, align 8, !tbaa !9
  %325 = fmul double %320, %324
  %326 = fcmp ogt double %316, %325
  br i1 %326, label %327, label %330

327:                                              ; preds = %315
  %328 = load i32, ptr %30, align 4, !tbaa !11
  %329 = icmp slt i32 %328, 15
  br label %330

330:                                              ; preds = %327, %315
  %331 = phi i1 [ false, %315 ], [ %329, %327 ]
  br i1 %331, label %332, label %335

332:                                              ; preds = %330
  %333 = load i32, ptr %30, align 4, !tbaa !11
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %30, align 4, !tbaa !11
  br label %315, !llvm.loop !28

335:                                              ; preds = %330
  %336 = load i32, ptr %30, align 4, !tbaa !11
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds [16 x i32], ptr %29, i64 0, i64 %337
  %339 = load i32, ptr %338, align 4, !tbaa !11
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %338, align 4, !tbaa !11
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %341

341:                                              ; preds = %441, %335
  %342 = load i32, ptr %33, align 4, !tbaa !11
  %343 = icmp slt i32 %342, 3
  br i1 %343, label %344, label %444

344:                                              ; preds = %341
  %345 = load i32, ptr %33, align 4, !tbaa !11
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds [3 x i32], ptr @plus1mod3, i64 0, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !11
  store i32 %348, ptr %35, align 4, !tbaa !11
  %349 = load i32, ptr %33, align 4, !tbaa !11
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds [3 x i32], ptr @minus1mod3, i64 0, i64 %350
  %352 = load i32, ptr %351, align 4, !tbaa !11
  store i32 %352, ptr %36, align 4, !tbaa !11
  %353 = load i32, ptr %35, align 4, !tbaa !11
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 %354
  %356 = load double, ptr %355, align 8, !tbaa !9
  %357 = load i32, ptr %36, align 4, !tbaa !11
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 %358
  %360 = load double, ptr %359, align 8, !tbaa !9
  %361 = load i32, ptr %35, align 4, !tbaa !11
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds [3 x double], ptr %10, i64 0, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !9
  %365 = load i32, ptr %36, align 4, !tbaa !11
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds [3 x double], ptr %10, i64 0, i64 %366
  %368 = load double, ptr %367, align 8, !tbaa !9
  %369 = fmul double %364, %368
  %370 = call double @llvm.fmuladd.f64(double %356, double %360, double %369)
  store double %370, ptr %12, align 8, !tbaa !9
  %371 = load double, ptr %12, align 8, !tbaa !9
  %372 = load double, ptr %12, align 8, !tbaa !9
  %373 = fmul double %371, %372
  %374 = load i32, ptr %35, align 4, !tbaa !11
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %375
  %377 = load double, ptr %376, align 8, !tbaa !9
  %378 = load i32, ptr %36, align 4, !tbaa !11
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds [3 x double], ptr %11, i64 0, i64 %379
  %381 = load double, ptr %380, align 8, !tbaa !9
  %382 = fmul double %377, %381
  %383 = fdiv double %373, %382
  store double %383, ptr %13, align 8, !tbaa !9
  store i32 8, ptr %31, align 4, !tbaa !11
  store i32 7, ptr %34, align 4, !tbaa !11
  br label %384

384:                                              ; preds = %397, %344
  %385 = load i32, ptr %34, align 4, !tbaa !11
  %386 = icmp sge i32 %385, 0
  br i1 %386, label %387, label %400

387:                                              ; preds = %384
  %388 = load double, ptr %13, align 8, !tbaa !9
  %389 = load i32, ptr %34, align 4, !tbaa !11
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds [8 x double], ptr %7, i64 0, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !9
  %393 = fcmp ogt double %388, %392
  br i1 %393, label %394, label %396

394:                                              ; preds = %387
  %395 = load i32, ptr %34, align 4, !tbaa !11
  store i32 %395, ptr %31, align 4, !tbaa !11
  br label %396

396:                                              ; preds = %394, %387
  br label %397

397:                                              ; preds = %396
  %398 = load i32, ptr %34, align 4, !tbaa !11
  %399 = add nsw i32 %398, -1
  store i32 %399, ptr %34, align 4, !tbaa !11
  br label %384, !llvm.loop !29

400:                                              ; preds = %384
  %401 = load double, ptr %12, align 8, !tbaa !9
  %402 = fcmp ole double %401, 0.000000e+00
  br i1 %402, label %403, label %424

403:                                              ; preds = %400
  %404 = load i32, ptr %31, align 4, !tbaa !11
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds [18 x i32], ptr %28, i64 0, i64 %405
  %407 = load i32, ptr %406, align 4, !tbaa !11
  %408 = add nsw i32 %407, 1
  store i32 %408, ptr %406, align 4, !tbaa !11
  %409 = load double, ptr %13, align 8, !tbaa !9
  %410 = load double, ptr %24, align 8, !tbaa !9
  %411 = fcmp ogt double %409, %410
  br i1 %411, label %412, label %414

412:                                              ; preds = %403
  %413 = load double, ptr %13, align 8, !tbaa !9
  store double %413, ptr %24, align 8, !tbaa !9
  br label %414

414:                                              ; preds = %412, %403
  %415 = load i32, ptr %32, align 4, !tbaa !11
  %416 = icmp ne i32 %415, 0
  br i1 %416, label %417, label %423

417:                                              ; preds = %414
  %418 = load double, ptr %13, align 8, !tbaa !9
  %419 = load double, ptr %25, align 8, !tbaa !9
  %420 = fcmp olt double %418, %419
  br i1 %420, label %421, label %423

421:                                              ; preds = %417
  %422 = load double, ptr %13, align 8, !tbaa !9
  store double %422, ptr %25, align 8, !tbaa !9
  br label %423

423:                                              ; preds = %421, %417, %414
  br label %440

424:                                              ; preds = %400
  %425 = load i32, ptr %31, align 4, !tbaa !11
  %426 = sub nsw i32 17, %425
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds [18 x i32], ptr %28, i64 0, i64 %427
  %429 = load i32, ptr %428, align 4, !tbaa !11
  %430 = add nsw i32 %429, 1
  store i32 %430, ptr %428, align 4, !tbaa !11
  %431 = load i32, ptr %32, align 4, !tbaa !11
  %432 = icmp ne i32 %431, 0
  br i1 %432, label %437, label %433

433:                                              ; preds = %424
  %434 = load double, ptr %13, align 8, !tbaa !9
  %435 = load double, ptr %25, align 8, !tbaa !9
  %436 = fcmp ogt double %434, %435
  br i1 %436, label %437, label %439

437:                                              ; preds = %433, %424
  %438 = load double, ptr %13, align 8, !tbaa !9
  store double %438, ptr %25, align 8, !tbaa !9
  store i32 0, ptr %32, align 4, !tbaa !11
  br label %439

439:                                              ; preds = %437, %433
  br label %440

440:                                              ; preds = %439, %423
  br label %441

441:                                              ; preds = %440
  %442 = load i32, ptr %33, align 4, !tbaa !11
  %443 = add nsw i32 %442, 1
  store i32 %443, ptr %33, align 4, !tbaa !11
  br label %341, !llvm.loop !30

444:                                              ; preds = %341
  %445 = load ptr, ptr %3, align 8, !tbaa !5
  %446 = call ptr @triangletraverse(ptr noundef %445)
  %447 = getelementptr inbounds %struct.otri, ptr %5, i32 0, i32 0
  store ptr %446, ptr %447, align 8, !tbaa !25
  br label %131, !llvm.loop !31

448:                                              ; preds = %131
  %449 = load double, ptr %15, align 8, !tbaa !9
  %450 = call double @sqrt(double noundef %449) #5
  store double %450, ptr %15, align 8, !tbaa !9
  %451 = load double, ptr %16, align 8, !tbaa !9
  %452 = call double @sqrt(double noundef %451) #5
  store double %452, ptr %16, align 8, !tbaa !9
  %453 = load double, ptr %21, align 8, !tbaa !9
  %454 = call double @sqrt(double noundef %453) #5
  store double %454, ptr %21, align 8, !tbaa !9
  %455 = load double, ptr %23, align 8, !tbaa !9
  %456 = call double @sqrt(double noundef %455) #5
  store double %456, ptr %23, align 8, !tbaa !9
  %457 = load double, ptr %18, align 8, !tbaa !9
  %458 = fmul double %457, 5.000000e-01
  store double %458, ptr %18, align 8, !tbaa !9
  %459 = load double, ptr %19, align 8, !tbaa !9
  %460 = fmul double %459, 5.000000e-01
  store double %460, ptr %19, align 8, !tbaa !9
  %461 = load double, ptr %24, align 8, !tbaa !9
  %462 = fcmp oge double %461, 1.000000e+00
  br i1 %462, label %463, label %464

463:                                              ; preds = %448
  store double 0.000000e+00, ptr %24, align 8, !tbaa !9
  br label %470

464:                                              ; preds = %448
  %465 = load double, ptr %27, align 8, !tbaa !9
  %466 = load double, ptr %24, align 8, !tbaa !9
  %467 = call double @sqrt(double noundef %466) #5
  %468 = call double @acos(double noundef %467) #5
  %469 = fmul double %465, %468
  store double %469, ptr %24, align 8, !tbaa !9
  br label %470

470:                                              ; preds = %464, %463
  %471 = load double, ptr %25, align 8, !tbaa !9
  %472 = fcmp oge double %471, 1.000000e+00
  br i1 %472, label %473, label %474

473:                                              ; preds = %470
  store double 1.800000e+02, ptr %25, align 8, !tbaa !9
  br label %491

474:                                              ; preds = %470
  %475 = load i32, ptr %32, align 4, !tbaa !11
  %476 = icmp ne i32 %475, 0
  br i1 %476, label %477, label %483

477:                                              ; preds = %474
  %478 = load double, ptr %27, align 8, !tbaa !9
  %479 = load double, ptr %25, align 8, !tbaa !9
  %480 = call double @sqrt(double noundef %479) #5
  %481 = call double @acos(double noundef %480) #5
  %482 = fmul double %478, %481
  store double %482, ptr %25, align 8, !tbaa !9
  br label %490

483:                                              ; preds = %474
  %484 = load double, ptr %27, align 8, !tbaa !9
  %485 = load double, ptr %25, align 8, !tbaa !9
  %486 = call double @sqrt(double noundef %485) #5
  %487 = call double @acos(double noundef %486) #5
  %488 = fneg double %484
  %489 = call double @llvm.fmuladd.f64(double %488, double %487, double 1.800000e+02)
  store double %489, ptr %25, align 8, !tbaa !9
  br label %490

490:                                              ; preds = %483, %477
  br label %491

491:                                              ; preds = %490, %473
  %492 = load double, ptr %18, align 8, !tbaa !9
  %493 = load double, ptr %19, align 8, !tbaa !9
  %494 = call i32 (ptr, ...) @printf(ptr noundef @.str.1104, double noundef %492, double noundef %493)
  %495 = load double, ptr %15, align 8, !tbaa !9
  %496 = load double, ptr %16, align 8, !tbaa !9
  %497 = call i32 (ptr, ...) @printf(ptr noundef @.str.1105, double noundef %495, double noundef %496)
  %498 = load double, ptr %21, align 8, !tbaa !9
  %499 = load double, ptr %23, align 8, !tbaa !9
  %500 = call i32 (ptr, ...) @printf(ptr noundef @.str.1106, double noundef %498, double noundef %499)
  %501 = call i32 (ptr, ...) @printf(ptr noundef @.str.1107)
  %502 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 0
  %503 = load double, ptr %502, align 16, !tbaa !9
  %504 = getelementptr inbounds [16 x i32], ptr %29, i64 0, i64 0
  %505 = load i32, ptr %504, align 16, !tbaa !11
  %506 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 7
  %507 = load double, ptr %506, align 8, !tbaa !9
  %508 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 8
  %509 = load double, ptr %508, align 16, !tbaa !9
  %510 = getelementptr inbounds [16 x i32], ptr %29, i64 0, i64 8
  %511 = load i32, ptr %510, align 16, !tbaa !11
  %512 = call i32 (ptr, ...) @printf(ptr noundef @.str.1108, double noundef %503, i32 noundef %505, double noundef %507, double noundef %509, i32 noundef %511)
  store i32 1, ptr %33, align 4, !tbaa !11
  br label %513

513:                                              ; preds = %546, %491
  %514 = load i32, ptr %33, align 4, !tbaa !11
  %515 = icmp slt i32 %514, 7
  br i1 %515, label %516, label %549

516:                                              ; preds = %513
  %517 = load i32, ptr %33, align 4, !tbaa !11
  %518 = sub nsw i32 %517, 1
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 %519
  %521 = load double, ptr %520, align 8, !tbaa !9
  %522 = load i32, ptr %33, align 4, !tbaa !11
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 %523
  %525 = load double, ptr %524, align 8, !tbaa !9
  %526 = load i32, ptr %33, align 4, !tbaa !11
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds [16 x i32], ptr %29, i64 0, i64 %527
  %529 = load i32, ptr %528, align 4, !tbaa !11
  %530 = load i32, ptr %33, align 4, !tbaa !11
  %531 = add nsw i32 %530, 7
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 %532
  %534 = load double, ptr %533, align 8, !tbaa !9
  %535 = load i32, ptr %33, align 4, !tbaa !11
  %536 = add nsw i32 %535, 8
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 %537
  %539 = load double, ptr %538, align 8, !tbaa !9
  %540 = load i32, ptr %33, align 4, !tbaa !11
  %541 = add nsw i32 %540, 8
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds [16 x i32], ptr %29, i64 0, i64 %542
  %544 = load i32, ptr %543, align 4, !tbaa !11
  %545 = call i32 (ptr, ...) @printf(ptr noundef @.str.1109, double noundef %521, double noundef %525, i32 noundef %529, double noundef %534, double noundef %539, i32 noundef %544)
  br label %546

546:                                              ; preds = %516
  %547 = load i32, ptr %33, align 4, !tbaa !11
  %548 = add nsw i32 %547, 1
  store i32 %548, ptr %33, align 4, !tbaa !11
  br label %513, !llvm.loop !32

549:                                              ; preds = %513
  %550 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 6
  %551 = load double, ptr %550, align 16, !tbaa !9
  %552 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 7
  %553 = load double, ptr %552, align 8, !tbaa !9
  %554 = getelementptr inbounds [16 x i32], ptr %29, i64 0, i64 7
  %555 = load i32, ptr %554, align 4, !tbaa !11
  %556 = getelementptr inbounds [16 x double], ptr %8, i64 0, i64 14
  %557 = load double, ptr %556, align 16, !tbaa !9
  %558 = getelementptr inbounds [16 x i32], ptr %29, i64 0, i64 15
  %559 = load i32, ptr %558, align 4, !tbaa !11
  %560 = call i32 (ptr, ...) @printf(ptr noundef @.str.1110, double noundef %551, double noundef %553, i32 noundef %555, double noundef %557, i32 noundef %559)
  %561 = call i32 (ptr, ...) @printf(ptr noundef @.str.1111)
  %562 = load double, ptr %24, align 8, !tbaa !9
  %563 = load double, ptr %25, align 8, !tbaa !9
  %564 = call i32 (ptr, ...) @printf(ptr noundef @.str.1112, double noundef %562, double noundef %563)
  %565 = call i32 (ptr, ...) @printf(ptr noundef @.str.1113)
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %566

566:                                              ; preds = %591, %549
  %567 = load i32, ptr %33, align 4, !tbaa !11
  %568 = icmp slt i32 %567, 9
  br i1 %568, label %569, label %594

569:                                              ; preds = %566
  %570 = load i32, ptr %33, align 4, !tbaa !11
  %571 = mul nsw i32 %570, 10
  %572 = load i32, ptr %33, align 4, !tbaa !11
  %573 = mul nsw i32 %572, 10
  %574 = add nsw i32 %573, 10
  %575 = load i32, ptr %33, align 4, !tbaa !11
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds [18 x i32], ptr %28, i64 0, i64 %576
  %578 = load i32, ptr %577, align 4, !tbaa !11
  %579 = load i32, ptr %33, align 4, !tbaa !11
  %580 = mul nsw i32 %579, 10
  %581 = add nsw i32 %580, 90
  %582 = load i32, ptr %33, align 4, !tbaa !11
  %583 = mul nsw i32 %582, 10
  %584 = add nsw i32 %583, 100
  %585 = load i32, ptr %33, align 4, !tbaa !11
  %586 = add nsw i32 %585, 9
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds [18 x i32], ptr %28, i64 0, i64 %587
  %589 = load i32, ptr %588, align 4, !tbaa !11
  %590 = call i32 (ptr, ...) @printf(ptr noundef @.str.1114, i32 noundef %571, i32 noundef %574, i32 noundef %578, i32 noundef %581, i32 noundef %584, i32 noundef %589)
  br label %591

591:                                              ; preds = %569
  %592 = load i32, ptr %33, align 4, !tbaa !11
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %33, align 4, !tbaa !11
  br label %566, !llvm.loop !33

594:                                              ; preds = %566
  %595 = call i32 (ptr, ...) @printf(ptr noundef @.str.225)
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 128, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #5
  ret void
}

; Function Attrs: nounwind
declare double @acos(double noundef) #3

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


; 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.225 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1103 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1104 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1105 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1106 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.1107 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1108 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.1109 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.1110 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.1111 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.1112 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.1113 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1114 = external hidden unnamed_addr constant [61 x i8], align 1

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #3

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @triangletraverse(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local double @counterclockwise(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
define dso_local void @quality_statistics(ptr noundef %0, ptr noundef %1) local_unnamed_addr #4 {
.preheader.preheader:
  %2 = alloca [3 x ptr], align 16
  %3 = alloca [16 x double], align 16
  %4 = alloca [3 x double], align 16
  %5 = alloca [3 x double], align 16
  %6 = alloca [3 x double], align 16
  %7 = alloca [18 x i32], align 16
  %8 = alloca [16 x i32], align 16
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %3) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #7
  %9 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1103)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(72) %7, i8 0, i64 72, i1 false), !tbaa !5
  store <2 x double> <double 1.500000e+00, double 2.000000e+00>, ptr %3, align 16, !tbaa !9
  %10 = getelementptr inbounds i8, ptr %3, i64 16
  store <2 x double> <double 2.500000e+00, double 3.000000e+00>, ptr %10, align 16, !tbaa !9
  %11 = getelementptr inbounds i8, ptr %3, i64 32
  store <2 x double> <double 4.000000e+00, double 6.000000e+00>, ptr %11, align 16, !tbaa !9
  %12 = getelementptr inbounds i8, ptr %3, i64 48
  store <2 x double> <double 1.000000e+01, double 1.500000e+01>, ptr %12, align 16, !tbaa !9
  %13 = getelementptr inbounds i8, ptr %3, i64 64
  store <2 x double> <double 2.500000e+01, double 5.000000e+01>, ptr %13, align 16, !tbaa !9
  %14 = getelementptr inbounds i8, ptr %3, i64 80
  store <2 x double> <double 1.000000e+02, double 3.000000e+02>, ptr %14, align 16, !tbaa !9
  %15 = getelementptr inbounds i8, ptr %3, i64 96
  store <2 x double> <double 1.000000e+03, double 1.000000e+04>, ptr %15, align 16, !tbaa !9
  %16 = getelementptr inbounds i8, ptr %3, i64 112
  store <2 x double> <double 1.000000e+05, double 0.000000e+00>, ptr %16, align 16, !tbaa !9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %8, i8 0, i64 64, i1 false), !tbaa !5
  %17 = getelementptr inbounds i8, ptr %0, i64 82648
  %18 = load double, ptr %17, align 8, !tbaa !11
  %19 = getelementptr inbounds i8, ptr %0, i64 82640
  %20 = load double, ptr %19, align 8, !tbaa !17
  %21 = fsub double %18, %20
  %22 = getelementptr inbounds i8, ptr %0, i64 82664
  %23 = load double, ptr %22, align 8, !tbaa !18
  %24 = fadd double %21, %23
  %25 = getelementptr inbounds i8, ptr %0, i64 82656
  %26 = load double, ptr %25, align 8, !tbaa !19
  %27 = fsub double %24, %26
  %28 = fmul double %27, %27
  tail call void @traversalinit(ptr noundef %0)
  %29 = tail call ptr @triangletraverse(ptr noundef %0)
  %.not205 = icmp eq ptr %29, null
  br i1 %.not205, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader.preheader
  %30 = getelementptr inbounds i8, ptr %2, i64 8
  %31 = getelementptr inbounds i8, ptr %2, i64 16
  %32 = getelementptr inbounds i8, ptr %4, i64 8
  %33 = getelementptr inbounds i8, ptr %5, i64 8
  %34 = getelementptr inbounds i8, ptr %4, i64 16
  %35 = getelementptr inbounds i8, ptr %5, i64 16
  %36 = getelementptr inbounds i8, ptr %6, i64 16
  br label %37

37:                                               ; preds = %.lr.ph, %283
  %.0149215 = phi i32 [ 1, %.lr.ph ], [ %.2151.2, %283 ]
  %.sroa.0.0214 = phi ptr [ %29, %.lr.ph ], [ %285, %283 ]
  %.0155213 = phi double [ %28, %.lr.ph ], [ %.2157.2, %283 ]
  %.0158212 = phi double [ 2.000000e+00, %.lr.ph ], [ %.2160.2, %283 ]
  %.0162211 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3165.2, %283 ]
  %.0167210 = phi double [ 0.000000e+00, %.lr.ph ], [ %.1168, %283 ]
  %.0169209 = phi double [ 0.000000e+00, %.lr.ph ], [ %.2171.2, %283 ]
  %.0172208 = phi double [ %28, %.lr.ph ], [ %.1173, %283 ]
  %.0176207 = phi double [ 0.000000e+00, %.lr.ph ], [ %.1177, %283 ]
  %.0178206 = phi double [ %28, %.lr.ph ], [ %.1179, %283 ]
  %38 = load i32, ptr @plus1mod3, align 4, !tbaa !5
  %39 = add nsw i32 %38, 3
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds ptr, ptr %.sroa.0.0214, i64 %40
  %42 = load ptr, ptr %41, align 8, !tbaa !20
  store ptr %42, ptr %2, align 16, !tbaa !20
  %43 = load i32, ptr @minus1mod3, align 4, !tbaa !5
  %44 = add nsw i32 %43, 3
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds ptr, ptr %.sroa.0.0214, i64 %45
  %47 = load ptr, ptr %46, align 8, !tbaa !20
  store ptr %47, ptr %30, align 8, !tbaa !20
  %48 = getelementptr inbounds i8, ptr %.sroa.0.0214, i64 24
  %49 = load ptr, ptr %48, align 8, !tbaa !20
  store ptr %49, ptr %31, align 16, !tbaa !20
  %50 = sext i32 %38 to i64
  %51 = getelementptr inbounds [3 x ptr], ptr %2, i64 0, i64 %50
  %52 = load ptr, ptr %51, align 8, !tbaa !20
  %53 = load double, ptr %52, align 8, !tbaa !9
  %54 = sext i32 %43 to i64
  %55 = getelementptr inbounds [3 x ptr], ptr %2, i64 0, i64 %54
  %56 = load ptr, ptr %55, align 8, !tbaa !20
  %57 = load double, ptr %56, align 8, !tbaa !9
  %58 = getelementptr inbounds i8, ptr %52, i64 8
  %59 = load double, ptr %58, align 8, !tbaa !9
  %60 = getelementptr inbounds i8, ptr %56, i64 8
  %61 = load double, ptr %60, align 8, !tbaa !9
  %62 = load i32, ptr getelementptr inbounds (i8, ptr @plus1mod3, i64 4), align 4, !tbaa !5
  %63 = load i32, ptr getelementptr inbounds (i8, ptr @minus1mod3, i64 4), align 4, !tbaa !5
  %64 = sext i32 %62 to i64
  %65 = getelementptr inbounds [3 x ptr], ptr %2, i64 0, i64 %64
  %66 = load ptr, ptr %65, align 8, !tbaa !20
  %67 = load double, ptr %66, align 8, !tbaa !9
  %68 = sext i32 %63 to i64
  %69 = getelementptr inbounds [3 x ptr], ptr %2, i64 0, i64 %68
  %70 = load ptr, ptr %69, align 8, !tbaa !20
  %71 = load double, ptr %70, align 8, !tbaa !9
  %72 = getelementptr inbounds i8, ptr %66, i64 8
  %73 = load double, ptr %72, align 8, !tbaa !9
  %74 = getelementptr inbounds i8, ptr %70, i64 8
  %75 = load double, ptr %74, align 8, !tbaa !9
  %76 = insertelement <2 x double> poison, double %53, i64 0
  %77 = insertelement <2 x double> %76, double %67, i64 1
  %78 = insertelement <2 x double> poison, double %57, i64 0
  %79 = insertelement <2 x double> %78, double %71, i64 1
  %80 = fsub <2 x double> %77, %79
  %81 = extractelement <2 x double> %80, i64 0
  store double %81, ptr %4, align 16, !tbaa !9
  %82 = insertelement <2 x double> poison, double %59, i64 0
  %83 = insertelement <2 x double> %82, double %73, i64 1
  %84 = insertelement <2 x double> poison, double %61, i64 0
  %85 = insertelement <2 x double> %84, double %75, i64 1
  %86 = fsub <2 x double> %83, %85
  %87 = extractelement <2 x double> %86, i64 0
  store double %87, ptr %5, align 16, !tbaa !9
  %88 = fmul <2 x double> %86, %86
  %89 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %80, <2 x double> %80, <2 x double> %88)
  %90 = extractelement <2 x double> %89, i64 0
  %91 = fcmp ogt double %90, 0.000000e+00
  %.1175 = select i1 %91, double %90, double 0.000000e+00
  %92 = fcmp ogt double %90, %.0169209
  %.2171 = select i1 %92, double %90, double %.0169209
  %93 = fcmp olt double %90, %.0155213
  %.2157 = select i1 %93, double %90, double %.0155213
  %94 = extractelement <2 x double> %80, i64 1
  store double %94, ptr %32, align 8, !tbaa !9
  %95 = extractelement <2 x double> %86, i64 1
  store double %95, ptr %33, align 8, !tbaa !9
  store <2 x double> %89, ptr %6, align 16, !tbaa !9
  %96 = extractelement <2 x double> %89, i64 1
  %97 = fcmp ogt double %96, %.1175
  %.1175.1 = select i1 %97, double %96, double %.1175
  %98 = fcmp ogt double %96, %.2171
  %.2171.1 = select i1 %98, double %96, double %.2171
  %99 = fcmp olt double %96, %.2157
  %.2157.1 = select i1 %99, double %96, double %.2157
  %100 = load i32, ptr getelementptr inbounds (i8, ptr @plus1mod3, i64 8), align 4, !tbaa !5
  %101 = load i32, ptr getelementptr inbounds (i8, ptr @minus1mod3, i64 8), align 4, !tbaa !5
  %102 = sext i32 %100 to i64
  %103 = getelementptr inbounds [3 x ptr], ptr %2, i64 0, i64 %102
  %104 = load ptr, ptr %103, align 8, !tbaa !20
  %105 = load double, ptr %104, align 8, !tbaa !9
  %106 = sext i32 %101 to i64
  %107 = getelementptr inbounds [3 x ptr], ptr %2, i64 0, i64 %106
  %108 = load ptr, ptr %107, align 8, !tbaa !20
  %109 = load double, ptr %108, align 8, !tbaa !9
  %110 = fsub double %105, %109
  store double %110, ptr %34, align 16, !tbaa !9
  %111 = getelementptr inbounds i8, ptr %104, i64 8
  %112 = load double, ptr %111, align 8, !tbaa !9
  %113 = getelementptr inbounds i8, ptr %108, i64 8
  %114 = load double, ptr %113, align 8, !tbaa !9
  %115 = fsub double %112, %114
  store double %115, ptr %35, align 16, !tbaa !9
  %116 = fmul double %115, %115
  %117 = tail call double @llvm.fmuladd.f64(double %110, double %110, double %116)
  store double %117, ptr %36, align 16, !tbaa !9
  %118 = fcmp ogt double %117, %.1175.1
  %.1175.2 = select i1 %118, double %117, double %.1175.1
  %119 = fcmp ogt double %117, %.2171.1
  %120 = fcmp olt double %117, %.2157.1
  %121 = tail call double @counterclockwise(ptr noundef %0, ptr noundef %1, ptr noundef %42, ptr noundef %47, ptr noundef %49)
  %122 = fcmp olt double %121, %.0178206
  %123 = fcmp ogt double %121, %.0176207
  %124 = fmul double %121, %121
  %125 = fdiv double %124, %.1175.2
  %126 = fcmp olt double %125, %.0172208
  %127 = fdiv double %.1175.2, %125
  %128 = fcmp ogt double %127, %.0167210
  br label %129

129:                                              ; preds = %129, %37
  %indvars.iv = phi i64 [ %indvars.iv.next, %129 ], [ 0, %37 ]
  %130 = getelementptr inbounds [16 x double], ptr %3, i64 0, i64 %indvars.iv
  %131 = load double, ptr %130, align 8, !tbaa !9
  %132 = fmul double %131, %131
  %133 = fcmp ogt double %127, %132
  %134 = icmp ult i64 %indvars.iv, 15
  %135 = and i1 %134, %133
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  br i1 %135, label %129, label %136, !llvm.loop !21

136:                                              ; preds = %129
  %.2171.2 = select i1 %119, double %117, double %.2171.1
  %.1179 = select i1 %122, double %121, double %.0178206
  %.1173 = select i1 %126, double %125, double %.0172208
  %137 = getelementptr inbounds [16 x i32], ptr %8, i64 0, i64 %indvars.iv
  %138 = load i32, ptr %137, align 4, !tbaa !5
  %139 = add nsw i32 %138, 1
  store i32 %139, ptr %137, align 4, !tbaa !5
  %140 = load i32, ptr @plus1mod3, align 4, !tbaa !5
  %141 = load i32, ptr @minus1mod3, align 4, !tbaa !5
  %142 = sext i32 %140 to i64
  %143 = getelementptr inbounds [3 x double], ptr %4, i64 0, i64 %142
  %144 = load double, ptr %143, align 8, !tbaa !9
  %145 = sext i32 %141 to i64
  %146 = getelementptr inbounds [3 x double], ptr %4, i64 0, i64 %145
  %147 = load double, ptr %146, align 8, !tbaa !9
  %148 = getelementptr inbounds [3 x double], ptr %5, i64 0, i64 %142
  %149 = load double, ptr %148, align 8, !tbaa !9
  %150 = getelementptr inbounds [3 x double], ptr %5, i64 0, i64 %145
  %151 = load double, ptr %150, align 8, !tbaa !9
  %152 = fmul double %149, %151
  %153 = tail call double @llvm.fmuladd.f64(double %144, double %147, double %152)
  %154 = fmul double %153, %153
  %155 = getelementptr inbounds [3 x double], ptr %6, i64 0, i64 %142
  %156 = load double, ptr %155, align 8, !tbaa !9
  %157 = getelementptr inbounds [3 x double], ptr %6, i64 0, i64 %145
  %158 = load double, ptr %157, align 8, !tbaa !9
  %159 = fmul double %156, %158
  %160 = fdiv double %154, %159
  %161 = fcmp ogt double %160, 0x3F9EE09BDADD2E4D
  %.1153 = select i1 %161, i32 7, i32 8
  %162 = fcmp ogt double %160, 0x3FBDF24174C2BF20
  %.1153.1 = select i1 %162, i32 6, i32 %.1153
  %163 = fcmp ogt double %160, 0x3FD0000000000002
  %.1153.2 = select i1 %163, i32 5, i32 %.1153.1
  %164 = fcmp ogt double %160, 0x3FDA7179607D231E
  %.1153.3 = select i1 %164, i32 4, i32 %.1153.2
  %165 = fcmp ogt double %160, 0x3FE2C7434FC16E71
  %.1153.4 = select i1 %165, i32 3, i32 %.1153.3
  %166 = fcmp ogt double %160, 0x3FE8000000000001
  %.1153.5 = select i1 %166, i32 2, i32 %.1153.4
  %167 = fcmp ogt double %160, 0x3FEC41B7D167A81D
  %.1153.6 = select i1 %167, i32 1, i32 %.1153.5
  %168 = fcmp ogt double %160, 0x3FEF08FB2129168D
  %.1153.7 = select i1 %168, i32 0, i32 %.1153.6
  %169 = fcmp ugt double %153, 0.000000e+00
  br i1 %169, label %179, label %170

170:                                              ; preds = %136
  %171 = zext nneg i32 %.1153.7 to i64
  %172 = getelementptr inbounds [18 x i32], ptr %7, i64 0, i64 %171
  %173 = load i32, ptr %172, align 4, !tbaa !5
  %174 = add nsw i32 %173, 1
  store i32 %174, ptr %172, align 4, !tbaa !5
  %175 = fcmp ogt double %160, %.0162211
  %.2164 = select i1 %175, double %160, double %.0162211
  %.not191 = icmp eq i32 %.0149215, 0
  br i1 %.not191, label %187, label %176

176:                                              ; preds = %170
  %177 = fcmp olt double %160, %.0158212
  br i1 %177, label %178, label %187

178:                                              ; preds = %176
  br label %187

179:                                              ; preds = %136
  %180 = sub nuw nsw i32 17, %.1153.7
  %181 = zext nneg i32 %180 to i64
  %182 = getelementptr inbounds [18 x i32], ptr %7, i64 0, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !5
  %184 = add nsw i32 %183, 1
  store i32 %184, ptr %182, align 4, !tbaa !5
  %.not190 = icmp ne i32 %.0149215, 0
  %185 = fcmp ogt double %160, %.0158212
  %or.cond = select i1 %.not190, i1 true, i1 %185
  br i1 %or.cond, label %186, label %187

186:                                              ; preds = %179
  br label %187

187:                                              ; preds = %179, %178, %176, %170, %186
  %.3165 = phi double [ %.2164, %178 ], [ %.2164, %176 ], [ %.2164, %170 ], [ %.0162211, %186 ], [ %.0162211, %179 ]
  %.2160 = phi double [ %160, %178 ], [ %.0158212, %176 ], [ %.0158212, %170 ], [ %160, %186 ], [ %.0158212, %179 ]
  %.not191.1 = phi i1 [ false, %178 ], [ false, %176 ], [ true, %170 ], [ true, %186 ], [ true, %179 ]
  %.not190.1 = phi i1 [ true, %178 ], [ true, %176 ], [ false, %170 ], [ false, %186 ], [ false, %179 ]
  %188 = load i32, ptr getelementptr inbounds (i8, ptr @plus1mod3, i64 4), align 4, !tbaa !5
  %189 = load i32, ptr getelementptr inbounds (i8, ptr @minus1mod3, i64 4), align 4, !tbaa !5
  %190 = sext i32 %188 to i64
  %191 = getelementptr inbounds [3 x double], ptr %4, i64 0, i64 %190
  %192 = load double, ptr %191, align 8, !tbaa !9
  %193 = sext i32 %189 to i64
  %194 = getelementptr inbounds [3 x double], ptr %4, i64 0, i64 %193
  %195 = load double, ptr %194, align 8, !tbaa !9
  %196 = getelementptr inbounds [3 x double], ptr %5, i64 0, i64 %190
  %197 = load double, ptr %196, align 8, !tbaa !9
  %198 = getelementptr inbounds [3 x double], ptr %5, i64 0, i64 %193
  %199 = load double, ptr %198, align 8, !tbaa !9
  %200 = fmul double %197, %199
  %201 = tail call double @llvm.fmuladd.f64(double %192, double %195, double %200)
  %202 = fmul double %201, %201
  %203 = getelementptr inbounds [3 x double], ptr %6, i64 0, i64 %190
  %204 = load double, ptr %203, align 8, !tbaa !9
  %205 = getelementptr inbounds [3 x double], ptr %6, i64 0, i64 %193
  %206 = load double, ptr %205, align 8, !tbaa !9
  %207 = fmul double %204, %206
  %208 = fdiv double %202, %207
  %209 = fcmp ogt double %208, 0x3F9EE09BDADD2E4D
  %.1153.1237 = select i1 %209, i32 7, i32 8
  %210 = fcmp ogt double %208, 0x3FBDF24174C2BF20
  %.1153.1.1 = select i1 %210, i32 6, i32 %.1153.1237
  %211 = fcmp ogt double %208, 0x3FD0000000000002
  %.1153.2.1 = select i1 %211, i32 5, i32 %.1153.1.1
  %212 = fcmp ogt double %208, 0x3FDA7179607D231E
  %.1153.3.1 = select i1 %212, i32 4, i32 %.1153.2.1
  %213 = fcmp ogt double %208, 0x3FE2C7434FC16E71
  %.1153.4.1 = select i1 %213, i32 3, i32 %.1153.3.1
  %214 = fcmp ogt double %208, 0x3FE8000000000001
  %.1153.5.1 = select i1 %214, i32 2, i32 %.1153.4.1
  %215 = fcmp ogt double %208, 0x3FEC41B7D167A81D
  %.1153.6.1 = select i1 %215, i32 1, i32 %.1153.5.1
  %216 = fcmp ogt double %208, 0x3FEF08FB2129168D
  %.1153.7.1 = select i1 %216, i32 0, i32 %.1153.6.1
  %217 = fcmp ugt double %201, 0.000000e+00
  br i1 %217, label %227, label %218

218:                                              ; preds = %187
  %219 = zext nneg i32 %.1153.7.1 to i64
  %220 = getelementptr inbounds [18 x i32], ptr %7, i64 0, i64 %219
  %221 = load i32, ptr %220, align 4, !tbaa !5
  %222 = add nsw i32 %221, 1
  store i32 %222, ptr %220, align 4, !tbaa !5
  %223 = fcmp ogt double %208, %.3165
  %.2164.1 = select i1 %223, double %208, double %.3165
  br i1 %.not191.1, label %235, label %224

224:                                              ; preds = %218
  %225 = fcmp olt double %208, %.2160
  br i1 %225, label %226, label %235

226:                                              ; preds = %224
  br label %235

227:                                              ; preds = %187
  %228 = sub nuw nsw i32 17, %.1153.7.1
  %229 = zext nneg i32 %228 to i64
  %230 = getelementptr inbounds [18 x i32], ptr %7, i64 0, i64 %229
  %231 = load i32, ptr %230, align 4, !tbaa !5
  %232 = add nsw i32 %231, 1
  store i32 %232, ptr %230, align 4, !tbaa !5
  %233 = fcmp ogt double %208, %.2160
  %or.cond.1 = select i1 %.not190.1, i1 true, i1 %233
  br i1 %or.cond.1, label %234, label %235

234:                                              ; preds = %227
  br label %235

235:                                              ; preds = %234, %227, %226, %224, %218
  %.3165.1 = phi double [ %.2164.1, %226 ], [ %.2164.1, %224 ], [ %.2164.1, %218 ], [ %.3165, %234 ], [ %.3165, %227 ]
  %.2160.1 = phi double [ %208, %226 ], [ %.2160, %224 ], [ %.2160, %218 ], [ %208, %234 ], [ %.2160, %227 ]
  %.not191.2 = phi i1 [ false, %226 ], [ false, %224 ], [ true, %218 ], [ true, %234 ], [ true, %227 ]
  %.not190.2 = phi i1 [ true, %226 ], [ true, %224 ], [ false, %218 ], [ false, %234 ], [ false, %227 ]
  %236 = load i32, ptr getelementptr inbounds (i8, ptr @plus1mod3, i64 8), align 4, !tbaa !5
  %237 = load i32, ptr getelementptr inbounds (i8, ptr @minus1mod3, i64 8), align 4, !tbaa !5
  %238 = sext i32 %236 to i64
  %239 = getelementptr inbounds [3 x double], ptr %4, i64 0, i64 %238
  %240 = load double, ptr %239, align 8, !tbaa !9
  %241 = sext i32 %237 to i64
  %242 = getelementptr inbounds [3 x double], ptr %4, i64 0, i64 %241
  %243 = load double, ptr %242, align 8, !tbaa !9
  %244 = getelementptr inbounds [3 x double], ptr %5, i64 0, i64 %238
  %245 = load double, ptr %244, align 8, !tbaa !9
  %246 = getelementptr inbounds [3 x double], ptr %5, i64 0, i64 %241
  %247 = load double, ptr %246, align 8, !tbaa !9
  %248 = fmul double %245, %247
  %249 = tail call double @llvm.fmuladd.f64(double %240, double %243, double %248)
  %250 = fmul double %249, %249
  %251 = getelementptr inbounds [3 x double], ptr %6, i64 0, i64 %238
  %252 = load double, ptr %251, align 8, !tbaa !9
  %253 = getelementptr inbounds [3 x double], ptr %6, i64 0, i64 %241
  %254 = load double, ptr %253, align 8, !tbaa !9
  %255 = fmul double %252, %254
  %256 = fdiv double %250, %255
  %257 = fcmp ogt double %256, 0x3F9EE09BDADD2E4D
  %.1153.2238 = select i1 %257, i32 7, i32 8
  %258 = fcmp ogt double %256, 0x3FBDF24174C2BF20
  %.1153.1.2 = select i1 %258, i32 6, i32 %.1153.2238
  %259 = fcmp ogt double %256, 0x3FD0000000000002
  %.1153.2.2 = select i1 %259, i32 5, i32 %.1153.1.2
  %260 = fcmp ogt double %256, 0x3FDA7179607D231E
  %.1153.3.2 = select i1 %260, i32 4, i32 %.1153.2.2
  %261 = fcmp ogt double %256, 0x3FE2C7434FC16E71
  %.1153.4.2 = select i1 %261, i32 3, i32 %.1153.3.2
  %262 = fcmp ogt double %256, 0x3FE8000000000001
  %.1153.5.2 = select i1 %262, i32 2, i32 %.1153.4.2
  %263 = fcmp ogt double %256, 0x3FEC41B7D167A81D
  %.1153.6.2 = select i1 %263, i32 1, i32 %.1153.5.2
  %264 = fcmp ogt double %256, 0x3FEF08FB2129168D
  %.1153.7.2 = select i1 %264, i32 0, i32 %.1153.6.2
  %265 = fcmp ugt double %249, 0.000000e+00
  br i1 %265, label %275, label %266

266:                                              ; preds = %235
  %267 = zext nneg i32 %.1153.7.2 to i64
  %268 = getelementptr inbounds [18 x i32], ptr %7, i64 0, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !5
  %270 = add nsw i32 %269, 1
  store i32 %270, ptr %268, align 4, !tbaa !5
  %271 = fcmp ogt double %256, %.3165.1
  %.2164.2 = select i1 %271, double %256, double %.3165.1
  br i1 %.not191.2, label %283, label %272

272:                                              ; preds = %266
  %273 = fcmp olt double %256, %.2160.1
  br i1 %273, label %274, label %283

274:                                              ; preds = %272
  br label %283

275:                                              ; preds = %235
  %276 = sub nuw nsw i32 17, %.1153.7.2
  %277 = zext nneg i32 %276 to i64
  %278 = getelementptr inbounds [18 x i32], ptr %7, i64 0, i64 %277
  %279 = load i32, ptr %278, align 4, !tbaa !5
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %278, align 4, !tbaa !5
  %281 = fcmp ogt double %256, %.2160.1
  %or.cond.2 = select i1 %.not190.2, i1 true, i1 %281
  br i1 %or.cond.2, label %282, label %283

282:                                              ; preds = %275
  br label %283

283:                                              ; preds = %282, %275, %274, %272, %266
  %.3165.2 = phi double [ %.2164.2, %274 ], [ %.2164.2, %272 ], [ %.2164.2, %266 ], [ %.3165.1, %282 ], [ %.3165.1, %275 ]
  %.2160.2 = phi double [ %256, %274 ], [ %.2160.1, %272 ], [ %.2160.1, %266 ], [ %256, %282 ], [ %.2160.1, %275 ]
  %284 = phi i1 [ false, %274 ], [ false, %272 ], [ true, %266 ], [ true, %282 ], [ true, %275 ]
  %.2151.2 = phi i32 [ 1, %274 ], [ 1, %272 ], [ 0, %266 ], [ 0, %282 ], [ 0, %275 ]
  %.2157.2 = select i1 %120, double %117, double %.2157.1
  %.1177 = select i1 %123, double %121, double %.0176207
  %.1168 = select i1 %128, double %127, double %.0167210
  %285 = tail call ptr @triangletraverse(ptr noundef %0)
  %.not = icmp eq ptr %285, null
  br i1 %.not, label %._crit_edge.loopexit, label %37, !llvm.loop !23

._crit_edge.loopexit:                             ; preds = %283
  %286 = fmul double %.1177, 5.000000e-01
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader.preheader
  %.0178.lcssa = phi double [ %28, %.preheader.preheader ], [ %.1179, %._crit_edge.loopexit ]
  %.0176.lcssa = phi double [ 0.000000e+00, %.preheader.preheader ], [ %286, %._crit_edge.loopexit ]
  %.0172.lcssa = phi double [ %28, %.preheader.preheader ], [ %.1173, %._crit_edge.loopexit ]
  %.0169.lcssa = phi double [ 0.000000e+00, %.preheader.preheader ], [ %.2171.2, %._crit_edge.loopexit ]
  %.0167.lcssa = phi double [ 0.000000e+00, %.preheader.preheader ], [ %.1168, %._crit_edge.loopexit ]
  %.0162.lcssa = phi double [ 0.000000e+00, %.preheader.preheader ], [ %.3165.2, %._crit_edge.loopexit ]
  %.0158.lcssa = phi double [ 2.000000e+00, %.preheader.preheader ], [ %.2160.2, %._crit_edge.loopexit ]
  %.0155.lcssa = phi double [ %28, %.preheader.preheader ], [ %.2157.2, %._crit_edge.loopexit ]
  %.0149.lcssa = phi i1 [ false, %.preheader.preheader ], [ %284, %._crit_edge.loopexit ]
  %287 = tail call double @sqrt(double noundef %.0155.lcssa) #7
  %288 = tail call double @sqrt(double noundef %.0169.lcssa) #7
  %289 = tail call double @sqrt(double noundef %.0172.lcssa) #7
  %290 = tail call double @sqrt(double noundef %.0167.lcssa) #7
  %291 = fcmp ult double %.0162.lcssa, 1.000000e+00
  br i1 %291, label %292, label %296

292:                                              ; preds = %._crit_edge
  %293 = tail call double @sqrt(double noundef %.0162.lcssa) #7
  %294 = tail call double @acos(double noundef %293) #7
  %295 = fmul double %294, 0x404CA5DC1A63C1F8
  br label %296

296:                                              ; preds = %._crit_edge, %292
  %.4166 = phi double [ %295, %292 ], [ 0.000000e+00, %._crit_edge ]
  %297 = fcmp ult double %.0158.lcssa, 1.000000e+00
  br i1 %297, label %298, label %305

298:                                              ; preds = %296
  %299 = tail call double @sqrt(double noundef %.0158.lcssa) #7
  %300 = tail call double @acos(double noundef %299) #7
  br i1 %.0149.lcssa, label %303, label %301

301:                                              ; preds = %298
  %302 = fmul double %300, 0x404CA5DC1A63C1F8
  br label %305

303:                                              ; preds = %298
  %304 = tail call double @llvm.fmuladd.f64(double %300, double 0xC04CA5DC1A63C1F8, double 1.800000e+02)
  br label %305

305:                                              ; preds = %296, %301, %303
  %.3161 = phi double [ %302, %301 ], [ %304, %303 ], [ 1.800000e+02, %296 ]
  %306 = getelementptr inbounds i8, ptr %3, i64 104
  %307 = getelementptr inbounds i8, ptr %3, i64 88
  %308 = getelementptr inbounds i8, ptr %3, i64 72
  %309 = getelementptr inbounds i8, ptr %3, i64 40
  %310 = getelementptr inbounds i8, ptr %3, i64 24
  %311 = getelementptr inbounds i8, ptr %3, i64 8
  %312 = fmul double %.0178.lcssa, 5.000000e-01
  %313 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1104, double noundef %312, double noundef %.0176.lcssa)
  %314 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1105, double noundef %287, double noundef %288)
  %315 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1106, double noundef %289, double noundef %290)
  %316 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1107)
  %317 = load i32, ptr %8, align 16, !tbaa !5
  %318 = getelementptr inbounds i8, ptr %8, i64 32
  %319 = load i32, ptr %318, align 16, !tbaa !5
  %320 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1108, double noundef 1.500000e+00, i32 noundef %317, double noundef 1.500000e+01, double noundef 2.500000e+01, i32 noundef %319)
  %321 = load double, ptr %3, align 16, !tbaa !9
  %322 = load double, ptr %311, align 8, !tbaa !9
  %323 = getelementptr inbounds i8, ptr %8, i64 4
  %324 = load i32, ptr %323, align 4, !tbaa !5
  %325 = load double, ptr %13, align 16, !tbaa !9
  %326 = load double, ptr %308, align 8, !tbaa !9
  %327 = getelementptr inbounds i8, ptr %8, i64 36
  %328 = load i32, ptr %327, align 4, !tbaa !5
  %329 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1109, double noundef %321, double noundef %322, i32 noundef %324, double noundef %325, double noundef %326, i32 noundef %328)
  %330 = load double, ptr %10, align 16, !tbaa !9
  %331 = getelementptr inbounds i8, ptr %8, i64 8
  %332 = load i32, ptr %331, align 8, !tbaa !5
  %333 = load double, ptr %14, align 16, !tbaa !9
  %334 = getelementptr inbounds i8, ptr %8, i64 40
  %335 = load i32, ptr %334, align 8, !tbaa !5
  %336 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1109, double noundef %322, double noundef %330, i32 noundef %332, double noundef %326, double noundef %333, i32 noundef %335)
  %337 = load double, ptr %310, align 8, !tbaa !9
  %338 = getelementptr inbounds i8, ptr %8, i64 12
  %339 = load i32, ptr %338, align 4, !tbaa !5
  %340 = load double, ptr %307, align 8, !tbaa !9
  %341 = getelementptr inbounds i8, ptr %8, i64 44
  %342 = load i32, ptr %341, align 4, !tbaa !5
  %343 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1109, double noundef %330, double noundef %337, i32 noundef %339, double noundef %333, double noundef %340, i32 noundef %342)
  %344 = load double, ptr %11, align 16, !tbaa !9
  %345 = getelementptr inbounds i8, ptr %8, i64 16
  %346 = load i32, ptr %345, align 16, !tbaa !5
  %347 = load double, ptr %15, align 16, !tbaa !9
  %348 = getelementptr inbounds i8, ptr %8, i64 48
  %349 = load i32, ptr %348, align 16, !tbaa !5
  %350 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1109, double noundef %337, double noundef %344, i32 noundef %346, double noundef %340, double noundef %347, i32 noundef %349)
  %351 = load double, ptr %309, align 8, !tbaa !9
  %352 = getelementptr inbounds i8, ptr %8, i64 20
  %353 = load i32, ptr %352, align 4, !tbaa !5
  %354 = load double, ptr %306, align 8, !tbaa !9
  %355 = getelementptr inbounds i8, ptr %8, i64 52
  %356 = load i32, ptr %355, align 4, !tbaa !5
  %357 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1109, double noundef %344, double noundef %351, i32 noundef %353, double noundef %347, double noundef %354, i32 noundef %356)
  %358 = load double, ptr %12, align 16, !tbaa !9
  %359 = getelementptr inbounds i8, ptr %8, i64 24
  %360 = load i32, ptr %359, align 8, !tbaa !5
  %361 = load double, ptr %16, align 16, !tbaa !9
  %362 = getelementptr inbounds i8, ptr %8, i64 56
  %363 = load i32, ptr %362, align 8, !tbaa !5
  %364 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1109, double noundef %351, double noundef %358, i32 noundef %360, double noundef %354, double noundef %361, i32 noundef %363)
  %365 = getelementptr inbounds i8, ptr %8, i64 28
  %366 = load i32, ptr %365, align 4, !tbaa !5
  %367 = getelementptr inbounds i8, ptr %8, i64 60
  %368 = load i32, ptr %367, align 4, !tbaa !5
  %369 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1110, double noundef 1.000000e+01, double noundef 1.500000e+01, i32 noundef %366, double noundef 1.000000e+05, i32 noundef %368)
  %370 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1111)
  %371 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1112, double noundef %.4166, double noundef %.3161)
  %372 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1113)
  %373 = load i32, ptr %7, align 16, !tbaa !5
  %374 = getelementptr inbounds i8, ptr %7, i64 36
  %375 = load i32, ptr %374, align 4, !tbaa !5
  %376 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 0, i32 noundef 10, i32 noundef %373, i32 noundef 90, i32 noundef 100, i32 noundef %375)
  %377 = getelementptr inbounds i8, ptr %7, i64 4
  %378 = load i32, ptr %377, align 4, !tbaa !5
  %379 = getelementptr inbounds i8, ptr %7, i64 40
  %380 = load i32, ptr %379, align 8, !tbaa !5
  %381 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 10, i32 noundef 20, i32 noundef %378, i32 noundef 100, i32 noundef 110, i32 noundef %380)
  %382 = getelementptr inbounds i8, ptr %7, i64 8
  %383 = load i32, ptr %382, align 8, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %7, i64 44
  %385 = load i32, ptr %384, align 4, !tbaa !5
  %386 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 20, i32 noundef 30, i32 noundef %383, i32 noundef 110, i32 noundef 120, i32 noundef %385)
  %387 = getelementptr inbounds i8, ptr %7, i64 12
  %388 = load i32, ptr %387, align 4, !tbaa !5
  %389 = getelementptr inbounds i8, ptr %7, i64 48
  %390 = load i32, ptr %389, align 16, !tbaa !5
  %391 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 30, i32 noundef 40, i32 noundef %388, i32 noundef 120, i32 noundef 130, i32 noundef %390)
  %392 = getelementptr inbounds i8, ptr %7, i64 16
  %393 = load i32, ptr %392, align 16, !tbaa !5
  %394 = getelementptr inbounds i8, ptr %7, i64 52
  %395 = load i32, ptr %394, align 4, !tbaa !5
  %396 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 40, i32 noundef 50, i32 noundef %393, i32 noundef 130, i32 noundef 140, i32 noundef %395)
  %397 = getelementptr inbounds i8, ptr %7, i64 20
  %398 = load i32, ptr %397, align 4, !tbaa !5
  %399 = getelementptr inbounds i8, ptr %7, i64 56
  %400 = load i32, ptr %399, align 8, !tbaa !5
  %401 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 50, i32 noundef 60, i32 noundef %398, i32 noundef 140, i32 noundef 150, i32 noundef %400)
  %402 = getelementptr inbounds i8, ptr %7, i64 24
  %403 = load i32, ptr %402, align 8, !tbaa !5
  %404 = getelementptr inbounds i8, ptr %7, i64 60
  %405 = load i32, ptr %404, align 4, !tbaa !5
  %406 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 60, i32 noundef 70, i32 noundef %403, i32 noundef 150, i32 noundef 160, i32 noundef %405)
  %407 = getelementptr inbounds i8, ptr %7, i64 28
  %408 = load i32, ptr %407, align 4, !tbaa !5
  %409 = getelementptr inbounds i8, ptr %7, i64 64
  %410 = load i32, ptr %409, align 16, !tbaa !5
  %411 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 70, i32 noundef 80, i32 noundef %408, i32 noundef 160, i32 noundef 170, i32 noundef %410)
  %412 = getelementptr inbounds i8, ptr %7, i64 32
  %413 = load i32, ptr %412, align 16, !tbaa !5
  %414 = getelementptr inbounds i8, ptr %7, i64 68
  %415 = load i32, ptr %414, align 4, !tbaa !5
  %416 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1114, i32 noundef 80, i32 noundef 90, i32 noundef %413, i32 noundef 170, i32 noundef 180, i32 noundef %415)
  %417 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.225)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #7
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @acos(double noundef) local_unnamed_addr #3

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

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

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

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

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


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass