; LLVM IR from jrl-umi3218/mc_rtc :: 3rd-party/qhull/src/libqhull (merge)

; 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.qhT = type { i32, i32, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, i32, i32, ptr, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, double, double, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [29 x i32], i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, double, i32, ptr, ptr, i32, i32, i32, i32, i32, ptr, i32, ptr, i32, [256 x i8], i32, [256 x i8], [512 x i8], i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, double, double, double, double, double, double, double, double, double, double, double, double, double, double, ptr, double, double, double, double, i32, [6 x i8], [1 x %struct.__jmp_buf_tag], [40 x i8], [1 x %struct.__jmp_buf_tag], [40 x i8], ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, i32, ptr, i32, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, double, i32, double, double, double, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, i32, i32, i32, ptr, double, double, double, double, i32, i32, i32, i32, i32, i32, ptr, ptr, i32 }
%struct.__jmp_buf_tag = type { [8 x i64], i32, %struct.__sigset_t }
%struct.__sigset_t = type { [16 x i64] }
%struct.qhstatT = type { [249 x %union.intrealT], [259 x i8], [249 x ptr], [249 x i16], [249 x i8], [249 x i8], [9 x %union.intrealT], i32, i32, i32, i32, double }
%union.intrealT = type { double }
%struct.facetT = type { double, double, double, ptr, %union.anon, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32 }
%union.anon = type { double }
%struct.vertexT = type { ptr, ptr, ptr, ptr, i32, i32, i8 }

@qh_qh = external global %struct.qhT, align 8
@qh_qhstat = external global %struct.qhstatT, align 8
@.str.226 = external hidden unnamed_addr constant [120 x i8], align 1
@.str.227 = external hidden unnamed_addr constant [124 x i8], align 1
@.str.228 = external hidden unnamed_addr constant [125 x i8], align 1
@.str.229 = external hidden unnamed_addr constant [116 x i8], align 1
@.str.230 = external hidden unnamed_addr constant [117 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

declare void @qh_fprintf(ptr noundef, i32 noundef, ptr noundef, ...) #1

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

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

declare void @qh_distplane(ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @qh_getcentrum(ptr noundef) #1

declare double @qh_getangle(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @qh_test_nonsimplicial_merge(ptr noundef %0, ptr noundef %1, double noundef %2, i32 noundef %3) #2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca double, align 8
  %9 = alloca i32, align 4
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %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 i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store double %2, ptr %8, align 8, !tbaa !9
  store i32 %3, ptr %9, align 4, !tbaa !11
  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 8, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  store i32 0, ptr %22, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  store i32 0, ptr %23, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  store i32 0, ptr %24, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  store i32 0, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  store ptr null, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  store ptr null, ptr %27, align 8, !tbaa !5
  %29 = load ptr, ptr %7, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.facetT, ptr %29, i32 0, i32 1
  %31 = load double, ptr %30, align 8, !tbaa !13
  %32 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 147), align 8, !tbaa !15
  %33 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 134), align 8, !tbaa !18
  %34 = fadd double %32, %33
  %35 = fcmp olt double %31, %34
  br i1 %35, label %36, label %40

36:                                               ; preds = %4
  %37 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 147), align 8, !tbaa !15
  %38 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 134), align 8, !tbaa !18
  %39 = fadd double %37, %38
  br label %44

40:                                               ; preds = %4
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.facetT, ptr %41, i32 0, i32 1
  %43 = load double, ptr %42, align 8, !tbaa !13
  br label %44

44:                                               ; preds = %40, %36
  %45 = phi double [ %39, %36 ], [ %43, %40 ]
  store double %45, ptr %16, align 8, !tbaa !9
  %46 = load double, ptr %16, align 8, !tbaa !9
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.facetT, ptr %47, i32 0, i32 1
  %49 = load double, ptr %48, align 8, !tbaa !13
  %50 = fcmp olt double %46, %49
  br i1 %50, label %51, label %55

51:                                               ; preds = %44
  %52 = load ptr, ptr %6, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.facetT, ptr %52, i32 0, i32 1
  %54 = load double, ptr %53, align 8, !tbaa !13
  br label %57

55:                                               ; preds = %44
  %56 = load double, ptr %16, align 8, !tbaa !9
  br label %57

57:                                               ; preds = %55, %51
  %58 = phi double [ %54, %51 ], [ %56, %55 ]
  store double %58, ptr %16, align 8, !tbaa !9
  %59 = load double, ptr %16, align 8, !tbaa !9
  %60 = fmul double 2.000000e+01, %59
  store double %60, ptr %17, align 8, !tbaa !9
  %61 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 201), align 8, !tbaa !19
  %62 = fneg double %61
  %63 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 35), align 8, !tbaa !20
  %64 = fcmp olt double %62, %63
  br i1 %64, label %65, label %67

65:                                               ; preds = %57
  %66 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 35), align 8, !tbaa !20
  br label %70

67:                                               ; preds = %57
  %68 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 201), align 8, !tbaa !19
  %69 = fneg double %68
  br label %70

70:                                               ; preds = %67, %65
  %71 = phi double [ %66, %65 ], [ %69, %67 ]
  store double %71, ptr %18, align 8, !tbaa !9
  %72 = load double, ptr %18, align 8, !tbaa !9
  %73 = fmul double 1.000000e+01, %72
  store double %73, ptr %19, align 8, !tbaa !9
  %74 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 37), align 4, !tbaa !21
  %75 = icmp ne i32 %74, 0
  br i1 %75, label %76, label %93

76:                                               ; preds = %70
  %77 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 209), align 8, !tbaa !22
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %93, label %79

79:                                               ; preds = %76
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.facetT, ptr %80, i32 0, i32 15
  %82 = load i32, ptr %81, align 8
  %83 = and i32 %82, 511
  %84 = icmp sgt i32 %83, 10
  br i1 %84, label %91, label %85

85:                                               ; preds = %79
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.facetT, ptr %86, i32 0, i32 15
  %88 = load i32, ptr %87, align 8
  %89 = and i32 %88, 511
  %90 = icmp sgt i32 %89, 10
  br i1 %90, label %91, label %93

91:                                               ; preds = %85, %79
  %92 = load double, ptr %16, align 8, !tbaa !9
  store double %92, ptr %21, align 8, !tbaa !9
  br label %95

93:                                               ; preds = %85, %76, %70
  %94 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 132), align 8, !tbaa !23
  store double %94, ptr %21, align 8, !tbaa !9
  br label %95

95:                                               ; preds = %93, %91
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.facetT, ptr %96, i32 0, i32 5
  %98 = load ptr, ptr %97, align 8, !tbaa !24
  %99 = icmp ne ptr %98, null
  br i1 %99, label %105, label %100

100:                                              ; preds = %95
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = call ptr @qh_getcentrum(ptr noundef %101)
  %103 = load ptr, ptr %6, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.facetT, ptr %103, i32 0, i32 5
  store ptr %102, ptr %104, align 8, !tbaa !24
  br label %105

105:                                              ; preds = %100, %95
  %106 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 21), align 8, !tbaa !25
  %107 = add nsw i32 %106, 1
  store i32 %107, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 21), align 8, !tbaa !25
  %108 = load ptr, ptr %6, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.facetT, ptr %108, i32 0, i32 5
  %110 = load ptr, ptr %109, align 8, !tbaa !24
  %111 = load ptr, ptr %7, align 8, !tbaa !5
  call void @qh_distplane(ptr noundef %110, ptr noundef %111, ptr noundef %10)
  %112 = load double, ptr %10, align 8, !tbaa !9
  %113 = load double, ptr %21, align 8, !tbaa !9
  %114 = fcmp ogt double %112, %113
  br i1 %114, label %115, label %116

115:                                              ; preds = %105
  store i32 1, ptr %22, align 4, !tbaa !11
  br label %130

116:                                              ; preds = %105
  %117 = load double, ptr %10, align 8, !tbaa !9
  %118 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 132), align 8, !tbaa !23
  %119 = fneg double %118
  %120 = fcmp oge double %117, %119
  br i1 %120, label %121, label %122

121:                                              ; preds = %116
  store i32 1, ptr %23, align 4, !tbaa !11
  br label %129

122:                                              ; preds = %116
  %123 = load double, ptr %10, align 8, !tbaa !9
  %124 = load double, ptr %19, align 8, !tbaa !9
  %125 = fneg double %124
  %126 = fcmp olt double %123, %125
  br i1 %126, label %127, label %128

127:                                              ; preds = %122
  store i32 1, ptr %24, align 4, !tbaa !11
  br label %128

128:                                              ; preds = %127, %122
  br label %129

129:                                              ; preds = %128, %121
  br label %130

130:                                              ; preds = %129, %115
  %131 = load ptr, ptr %7, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.facetT, ptr %131, i32 0, i32 5
  %133 = load ptr, ptr %132, align 8, !tbaa !24
  %134 = icmp ne ptr %133, null
  br i1 %134, label %140, label %135

135:                                              ; preds = %130
  %136 = load ptr, ptr %7, align 8, !tbaa !5
  %137 = call ptr @qh_getcentrum(ptr noundef %136)
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.facetT, ptr %138, i32 0, i32 5
  store ptr %137, ptr %139, align 8, !tbaa !24
  br label %140

140:                                              ; preds = %135, %130
  %141 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 21), align 8, !tbaa !25
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 21), align 8, !tbaa !25
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.facetT, ptr %143, i32 0, i32 5
  %145 = load ptr, ptr %144, align 8, !tbaa !24
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  call void @qh_distplane(ptr noundef %145, ptr noundef %146, ptr noundef %15)
  %147 = load double, ptr %15, align 8, !tbaa !9
  %148 = load double, ptr %21, align 8, !tbaa !9
  %149 = fcmp ogt double %147, %148
  br i1 %149, label %150, label %151

150:                                              ; preds = %140
  store i32 1, ptr %22, align 4, !tbaa !11
  br label %169

151:                                              ; preds = %140
  %152 = load double, ptr %15, align 8, !tbaa !9
  %153 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 132), align 8, !tbaa !23
  %154 = fneg double %153
  %155 = fcmp oge double %152, %154
  br i1 %155, label %156, label %157

156:                                              ; preds = %151
  store i32 1, ptr %23, align 4, !tbaa !11
  br label %168

157:                                              ; preds = %151
  %158 = load double, ptr %15, align 8, !tbaa !9
  %159 = load double, ptr %19, align 8, !tbaa !9
  %160 = fneg double %159
  %161 = fcmp olt double %158, %160
  br i1 %161, label %162, label %167

162:                                              ; preds = %157
  %163 = load i32, ptr %24, align 4, !tbaa !11
  %164 = icmp ne i32 %163, 0
  br i1 %164, label %165, label %166

165:                                              ; preds = %162
  store i32 0, ptr %5, align 4
  store i32 1, ptr %28, align 4
  br label %647

166:                                              ; preds = %162
  store i32 1, ptr %24, align 4, !tbaa !11
  br label %167

167:                                              ; preds = %166, %157
  br label %168

168:                                              ; preds = %167, %156
  br label %169

169:                                              ; preds = %168, %150
  %170 = load i32, ptr %22, align 4, !tbaa !11
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %172, label %219

172:                                              ; preds = %169
  %173 = load i32, ptr %9, align 4, !tbaa !11
  %174 = icmp ne i32 %173, 0
  br i1 %174, label %188, label %175

175:                                              ; preds = %172
  %176 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 4), align 8, !tbaa !26
  %177 = icmp ne i32 %176, 0
  br i1 %177, label %178, label %188

178:                                              ; preds = %175
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.facetT, ptr %179, i32 0, i32 3
  %181 = load ptr, ptr %180, align 8, !tbaa !27
  %182 = load ptr, ptr %7, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.facetT, ptr %182, i32 0, i32 3
  %184 = load ptr, ptr %183, align 8, !tbaa !27
  %185 = call double @qh_getangle(ptr noundef %181, ptr noundef %184)
  store double %185, ptr %8, align 8, !tbaa !9
  %186 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 7), align 8, !tbaa !25
  %187 = add nsw i32 %186, 1
  store i32 %187, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 7), align 8, !tbaa !25
  br label %188

188:                                              ; preds = %178, %175, %172
  %189 = load double, ptr %10, align 8, !tbaa !9
  %190 = load double, ptr %15, align 8, !tbaa !9
  %191 = fcmp olt double %189, %190
  br i1 %191, label %192, label %194

192:                                              ; preds = %188
  %193 = load double, ptr %15, align 8, !tbaa !9
  br label %196

194:                                              ; preds = %188
  %195 = load double, ptr %10, align 8, !tbaa !9
  br label %196

196:                                              ; preds = %194, %192
  %197 = phi double [ %193, %192 ], [ %195, %194 ]
  store double %197, ptr %20, align 8, !tbaa !9
  %198 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 31), align 8, !tbaa !25
  %199 = add nsw i32 %198, 1
  store i32 %199, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 31), align 8, !tbaa !25
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = load double, ptr %20, align 8, !tbaa !9
  %203 = load double, ptr %8, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %200, ptr noundef %201, i32 noundef 3, double noundef %202, double noundef %203)
  %204 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 29), align 8, !tbaa !28
  %205 = icmp ne i32 %204, 0
  br i1 %205, label %206, label %218

206:                                              ; preds = %196
  %207 = load ptr, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 158), align 8, !tbaa !29
  %208 = load ptr, ptr %6, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.facetT, ptr %208, i32 0, i32 14
  %210 = load i32, ptr %209, align 4, !tbaa !30
  %211 = load ptr, ptr %7, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.facetT, ptr %211, i32 0, i32 14
  %213 = load i32, ptr %212, align 4, !tbaa !30
  %214 = load double, ptr %10, align 8, !tbaa !9
  %215 = load double, ptr %15, align 8, !tbaa !9
  %216 = load double, ptr %8, align 8, !tbaa !9
  %217 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 190), align 4, !tbaa !31
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %207, i32 noundef 18, ptr noundef @.str.226, i32 noundef %210, i32 noundef %213, double noundef %214, double noundef %215, double noundef %216, i32 noundef %217)
  br label %218

218:                                              ; preds = %206, %196
  store i32 1, ptr %5, align 4
  store i32 1, ptr %28, align 4
  br label %647

219:                                              ; preds = %169
  %220 = load i32, ptr %24, align 4, !tbaa !11
  %221 = icmp ne i32 %220, 0
  br i1 %221, label %222, label %254

222:                                              ; preds = %219
  %223 = load double, ptr %10, align 8, !tbaa !9
  %224 = load double, ptr %19, align 8, !tbaa !9
  %225 = fneg double %224
  %226 = fcmp olt double %223, %225
  br i1 %226, label %227, label %240

227:                                              ; preds = %222
  %228 = load double, ptr %10, align 8, !tbaa !9
  store double %228, ptr %12, align 8, !tbaa !9
  %229 = load double, ptr %10, align 8, !tbaa !9
  store double %229, ptr %11, align 8, !tbaa !9
  %230 = load ptr, ptr %7, align 8, !tbaa !5
  %231 = load ptr, ptr %6, align 8, !tbaa !5
  %232 = call ptr @qh_furthestvertex(ptr noundef %230, ptr noundef %231, ptr noundef %14, ptr noundef %13)
  store ptr %232, ptr %27, align 8, !tbaa !5
  %233 = load ptr, ptr %27, align 8, !tbaa !5
  %234 = icmp ne ptr %233, null
  br i1 %234, label %239, label %235

235:                                              ; preds = %227
  %236 = load ptr, ptr %7, align 8, !tbaa !5
  %237 = load ptr, ptr %6, align 8, !tbaa !5
  %238 = load double, ptr %14, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %236, ptr noundef %237, i32 noundef 11, double noundef %238, double noundef 2.000000e+00)
  store i32 1, ptr %25, align 4, !tbaa !11
  br label %239

239:                                              ; preds = %235, %227
  br label %253

240:                                              ; preds = %222
  %241 = load double, ptr %15, align 8, !tbaa !9
  store double %241, ptr %14, align 8, !tbaa !9
  %242 = load double, ptr %15, align 8, !tbaa !9
  store double %242, ptr %13, align 8, !tbaa !9
  %243 = load ptr, ptr %6, align 8, !tbaa !5
  %244 = load ptr, ptr %7, align 8, !tbaa !5
  %245 = call ptr @qh_furthestvertex(ptr noundef %243, ptr noundef %244, ptr noundef %12, ptr noundef %11)
  store ptr %245, ptr %26, align 8, !tbaa !5
  %246 = load ptr, ptr %26, align 8, !tbaa !5
  %247 = icmp ne ptr %246, null
  br i1 %247, label %252, label %248

248:                                              ; preds = %240
  %249 = load ptr, ptr %6, align 8, !tbaa !5
  %250 = load ptr, ptr %7, align 8, !tbaa !5
  %251 = load double, ptr %12, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %249, ptr noundef %250, i32 noundef 11, double noundef %251, double noundef 2.000000e+00)
  store i32 1, ptr %25, align 4, !tbaa !11
  br label %252

252:                                              ; preds = %248, %240
  br label %253

253:                                              ; preds = %252, %239
  br label %288

254:                                              ; preds = %219
  %255 = load ptr, ptr %6, align 8, !tbaa !5
  %256 = load ptr, ptr %7, align 8, !tbaa !5
  %257 = call ptr @qh_furthestvertex(ptr noundef %255, ptr noundef %256, ptr noundef %12, ptr noundef %11)
  store ptr %257, ptr %26, align 8, !tbaa !5
  %258 = load ptr, ptr %26, align 8, !tbaa !5
  %259 = icmp ne ptr %258, null
  br i1 %259, label %260, label %283

260:                                              ; preds = %254
  %261 = load ptr, ptr %7, align 8, !tbaa !5
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = call ptr @qh_furthestvertex(ptr noundef %261, ptr noundef %262, ptr noundef %14, ptr noundef %13)
  store ptr %263, ptr %27, align 8, !tbaa !5
  %264 = load ptr, ptr %27, align 8, !tbaa !5
  %265 = icmp ne ptr %264, null
  br i1 %265, label %270, label %266

266:                                              ; preds = %260
  %267 = load ptr, ptr %7, align 8, !tbaa !5
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = load double, ptr %14, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %267, ptr noundef %268, i32 noundef 11, double noundef %269, double noundef 2.000000e+00)
  store i32 1, ptr %25, align 4, !tbaa !11
  br label %282

270:                                              ; preds = %260
  %271 = load double, ptr %11, align 8, !tbaa !9
  %272 = load double, ptr %19, align 8, !tbaa !9
  %273 = fneg double %272
  %274 = fcmp olt double %271, %273
  br i1 %274, label %280, label %275

275:                                              ; preds = %270
  %276 = load double, ptr %13, align 8, !tbaa !9
  %277 = load double, ptr %19, align 8, !tbaa !9
  %278 = fneg double %277
  %279 = fcmp olt double %276, %278
  br i1 %279, label %280, label %281

280:                                              ; preds = %275, %270
  store i32 1, ptr %24, align 4, !tbaa !11
  br label %281

281:                                              ; preds = %280, %275
  br label %282

282:                                              ; preds = %281, %266
  br label %287

283:                                              ; preds = %254
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = load ptr, ptr %7, align 8, !tbaa !5
  %286 = load double, ptr %12, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %284, ptr noundef %285, i32 noundef 11, double noundef %286, double noundef 2.000000e+00)
  store i32 1, ptr %25, align 4, !tbaa !11
  br label %287

287:                                              ; preds = %283, %282
  br label %288

288:                                              ; preds = %287, %253
  %289 = load i32, ptr %25, align 4, !tbaa !11
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %294

291:                                              ; preds = %288
  %292 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 190), align 8, !tbaa !25
  %293 = add nsw i32 %292, 1
  store i32 %293, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 190), align 8, !tbaa !25
  store i32 1, ptr %5, align 4
  store i32 1, ptr %28, align 4
  br label %647

294:                                              ; preds = %288
  %295 = load double, ptr %12, align 8, !tbaa !9
  %296 = load double, ptr %17, align 8, !tbaa !9
  %297 = fcmp ogt double %295, %296
  br i1 %297, label %302, label %298

298:                                              ; preds = %294
  %299 = load double, ptr %14, align 8, !tbaa !9
  %300 = load double, ptr %17, align 8, !tbaa !9
  %301 = fcmp ogt double %299, %300
  br i1 %301, label %302, label %303

302:                                              ; preds = %298, %294
  store i32 1, ptr %22, align 4, !tbaa !11
  br label %317

303:                                              ; preds = %298
  %304 = load i32, ptr %24, align 4, !tbaa !11
  %305 = icmp ne i32 %304, 0
  br i1 %305, label %306, label %316

306:                                              ; preds = %303
  %307 = load double, ptr %12, align 8, !tbaa !9
  %308 = load double, ptr %16, align 8, !tbaa !9
  %309 = fcmp ogt double %307, %308
  br i1 %309, label %314, label %310

310:                                              ; preds = %306
  %311 = load double, ptr %14, align 8, !tbaa !9
  %312 = load double, ptr %16, align 8, !tbaa !9
  %313 = fcmp ogt double %311, %312
  br i1 %313, label %314, label %315

314:                                              ; preds = %310, %306
  store i32 1, ptr %22, align 4, !tbaa !11
  br label %315

315:                                              ; preds = %314, %310
  br label %316

316:                                              ; preds = %315, %303
  br label %317

317:                                              ; preds = %316, %302
  %318 = load i32, ptr %22, align 4, !tbaa !11
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %327, label %320

320:                                              ; preds = %317
  %321 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 37), align 4, !tbaa !21
  %322 = icmp ne i32 %321, 0
  br i1 %322, label %323, label %327

323:                                              ; preds = %320
  %324 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 209), align 8, !tbaa !22
  %325 = icmp ne i32 %324, 0
  br i1 %325, label %327, label %326

326:                                              ; preds = %323
  store i32 0, ptr %5, align 4
  store i32 1, ptr %28, align 4
  br label %647

327:                                              ; preds = %323, %320, %317
  %328 = load i32, ptr %22, align 4, !tbaa !11
  %329 = icmp ne i32 %328, 0
  br i1 %329, label %330, label %352

330:                                              ; preds = %327
  %331 = load i32, ptr %23, align 4, !tbaa !11
  %332 = icmp ne i32 %331, 0
  br i1 %332, label %352, label %333

333:                                              ; preds = %330
  %334 = load double, ptr %12, align 8, !tbaa !9
  %335 = load double, ptr %16, align 8, !tbaa !9
  %336 = fcmp olt double %334, %335
  br i1 %336, label %337, label %351

337:                                              ; preds = %333
  %338 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 35), align 8, !tbaa !20
  %339 = fneg double %338
  %340 = fcmp une double %339, 0.000000e+00
  br i1 %340, label %350, label %341

341:                                              ; preds = %337
  %342 = load double, ptr %14, align 8, !tbaa !9
  %343 = load double, ptr %16, align 8, !tbaa !9
  %344 = fcmp olt double %342, %343
  br i1 %344, label %345, label %351

345:                                              ; preds = %341
  %346 = load double, ptr %13, align 8, !tbaa !9
  %347 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 35), align 8, !tbaa !20
  %348 = fneg double %347
  %349 = fcmp oge double %346, %348
  br i1 %349, label %350, label %351

350:                                              ; preds = %345, %337
  store i32 1, ptr %23, align 4, !tbaa !11
  br label %351

351:                                              ; preds = %350, %345, %341, %333
  br label %368

352:                                              ; preds = %330, %327
  %353 = load i32, ptr %23, align 4, !tbaa !11
  %354 = icmp ne i32 %353, 0
  br i1 %354, label %367, label %355

355:                                              ; preds = %352
  %356 = load double, ptr %11, align 8, !tbaa !9
  %357 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 35), align 8, !tbaa !20
  %358 = fneg double %357
  %359 = fcmp oge double %356, %358
  br i1 %359, label %365, label %360

360:                                              ; preds = %355
  %361 = load double, ptr %13, align 8, !tbaa !9
  %362 = load double, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 35), align 8, !tbaa !20
  %363 = fneg double %362
  %364 = fcmp oge double %361, %363
  br i1 %364, label %365, label %366

365:                                              ; preds = %360, %355
  store i32 1, ptr %23, align 4, !tbaa !11
  br label %366

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

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

368:                                              ; preds = %367, %351
  %369 = load i32, ptr %22, align 4, !tbaa !11
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %375, label %371

371:                                              ; preds = %368
  %372 = load i32, ptr %23, align 4, !tbaa !11
  %373 = icmp ne i32 %372, 0
  br i1 %373, label %375, label %374

374:                                              ; preds = %371
  store i32 0, ptr %5, align 4
  store i32 1, ptr %28, align 4
  br label %647

375:                                              ; preds = %371, %368
  %376 = load i32, ptr %9, align 4, !tbaa !11
  %377 = icmp ne i32 %376, 0
  br i1 %377, label %391, label %378

378:                                              ; preds = %375
  %379 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 4), align 8, !tbaa !26
  %380 = icmp ne i32 %379, 0
  br i1 %380, label %381, label %391

381:                                              ; preds = %378
  %382 = load ptr, ptr %6, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.facetT, ptr %382, i32 0, i32 3
  %384 = load ptr, ptr %383, align 8, !tbaa !27
  %385 = load ptr, ptr %7, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.facetT, ptr %385, i32 0, i32 3
  %387 = load ptr, ptr %386, align 8, !tbaa !27
  %388 = call double @qh_getangle(ptr noundef %384, ptr noundef %387)
  store double %388, ptr %8, align 8, !tbaa !9
  %389 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 7), align 8, !tbaa !25
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 7), align 8, !tbaa !25
  br label %391

391:                                              ; preds = %381, %378, %375
  %392 = load i32, ptr %22, align 4, !tbaa !11
  %393 = icmp ne i32 %392, 0
  br i1 %393, label %394, label %447

394:                                              ; preds = %391
  %395 = load i32, ptr %24, align 4, !tbaa !11
  %396 = icmp ne i32 %395, 0
  br i1 %396, label %397, label %447

397:                                              ; preds = %394
  %398 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 231), align 8, !tbaa !25
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 231), align 8, !tbaa !25
  %400 = load double, ptr %12, align 8, !tbaa !9
  %401 = load double, ptr %14, align 8, !tbaa !9
  %402 = fcmp ogt double %400, %401
  br i1 %402, label %403, label %408

403:                                              ; preds = %397
  %404 = load ptr, ptr %6, align 8, !tbaa !5
  %405 = load ptr, ptr %7, align 8, !tbaa !5
  %406 = load double, ptr %12, align 8, !tbaa !9
  %407 = load double, ptr %8, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %404, ptr noundef %405, i32 noundef 5, double noundef %406, double noundef %407)
  br label %413

408:                                              ; preds = %397
  %409 = load ptr, ptr %7, align 8, !tbaa !5
  %410 = load ptr, ptr %6, align 8, !tbaa !5
  %411 = load double, ptr %14, align 8, !tbaa !9
  %412 = load double, ptr %8, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %409, ptr noundef %410, i32 noundef 5, double noundef %411, double noundef %412)
  br label %413

413:                                              ; preds = %408, %403
  %414 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 29), align 8, !tbaa !28
  %415 = icmp ne i32 %414, 0
  br i1 %415, label %416, label %446

416:                                              ; preds = %413
  %417 = load ptr, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 158), align 8, !tbaa !29
  %418 = load ptr, ptr %6, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.facetT, ptr %418, i32 0, i32 14
  %420 = load i32, ptr %419, align 4, !tbaa !30
  %421 = load ptr, ptr %26, align 8, !tbaa !5
  %422 = icmp ne ptr %421, null
  br i1 %422, label %423, label %427

423:                                              ; preds = %416
  %424 = load ptr, ptr %26, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.vertexT, ptr %424, i32 0, i32 4
  %426 = load i32, ptr %425, align 8, !tbaa !32
  br label %428

427:                                              ; preds = %416
  br label %428

428:                                              ; preds = %427, %423
  %429 = phi i32 [ %426, %423 ], [ -1, %427 ]
  %430 = load ptr, ptr %7, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.facetT, ptr %430, i32 0, i32 14
  %432 = load i32, ptr %431, align 4, !tbaa !30
  %433 = load ptr, ptr %27, align 8, !tbaa !5
  %434 = icmp ne ptr %433, null
  br i1 %434, label %435, label %439

435:                                              ; preds = %428
  %436 = load ptr, ptr %27, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.vertexT, ptr %436, i32 0, i32 4
  %438 = load i32, ptr %437, align 8, !tbaa !32
  br label %440

439:                                              ; preds = %428
  br label %440

440:                                              ; preds = %439, %435
  %441 = phi i32 [ %438, %435 ], [ -1, %439 ]
  %442 = load double, ptr %12, align 8, !tbaa !9
  %443 = load double, ptr %14, align 8, !tbaa !9
  %444 = load double, ptr %8, align 8, !tbaa !9
  %445 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 190), align 4, !tbaa !31
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %417, i32 noundef 27, ptr noundef @.str.227, i32 noundef %420, i32 noundef %429, i32 noundef %432, i32 noundef %441, double noundef %442, double noundef %443, double noundef %444, i32 noundef %445)
  br label %446

446:                                              ; preds = %440, %413
  br label %646

447:                                              ; preds = %394, %391
  %448 = load i32, ptr %22, align 4, !tbaa !11
  %449 = icmp ne i32 %448, 0
  br i1 %449, label %450, label %503

450:                                              ; preds = %447
  %451 = load i32, ptr %23, align 4, !tbaa !11
  %452 = icmp ne i32 %451, 0
  br i1 %452, label %453, label %503

453:                                              ; preds = %450
  %454 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 30), align 8, !tbaa !25
  %455 = add nsw i32 %454, 1
  store i32 %455, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 30), align 8, !tbaa !25
  %456 = load double, ptr %12, align 8, !tbaa !9
  %457 = load double, ptr %14, align 8, !tbaa !9
  %458 = fcmp ogt double %456, %457
  br i1 %458, label %459, label %464

459:                                              ; preds = %453
  %460 = load ptr, ptr %6, align 8, !tbaa !5
  %461 = load ptr, ptr %7, align 8, !tbaa !5
  %462 = load double, ptr %12, align 8, !tbaa !9
  %463 = load double, ptr %8, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %460, ptr noundef %461, i32 noundef 4, double noundef %462, double noundef %463)
  br label %469

464:                                              ; preds = %453
  %465 = load ptr, ptr %7, align 8, !tbaa !5
  %466 = load ptr, ptr %6, align 8, !tbaa !5
  %467 = load double, ptr %14, align 8, !tbaa !9
  %468 = load double, ptr %8, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %465, ptr noundef %466, i32 noundef 4, double noundef %467, double noundef %468)
  br label %469

469:                                              ; preds = %464, %459
  %470 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 29), align 8, !tbaa !28
  %471 = icmp ne i32 %470, 0
  br i1 %471, label %472, label %502

472:                                              ; preds = %469
  %473 = load ptr, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 158), align 8, !tbaa !29
  %474 = load ptr, ptr %6, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.facetT, ptr %474, i32 0, i32 14
  %476 = load i32, ptr %475, align 4, !tbaa !30
  %477 = load ptr, ptr %26, align 8, !tbaa !5
  %478 = icmp ne ptr %477, null
  br i1 %478, label %479, label %483

479:                                              ; preds = %472
  %480 = load ptr, ptr %26, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.vertexT, ptr %480, i32 0, i32 4
  %482 = load i32, ptr %481, align 8, !tbaa !32
  br label %484

483:                                              ; preds = %472
  br label %484

484:                                              ; preds = %483, %479
  %485 = phi i32 [ %482, %479 ], [ -1, %483 ]
  %486 = load ptr, ptr %7, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.facetT, ptr %486, i32 0, i32 14
  %488 = load i32, ptr %487, align 4, !tbaa !30
  %489 = load ptr, ptr %27, align 8, !tbaa !5
  %490 = icmp ne ptr %489, null
  br i1 %490, label %491, label %495

491:                                              ; preds = %484
  %492 = load ptr, ptr %27, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.vertexT, ptr %492, i32 0, i32 4
  %494 = load i32, ptr %493, align 8, !tbaa !32
  br label %496

495:                                              ; preds = %484
  br label %496

496:                                              ; preds = %495, %491
  %497 = phi i32 [ %494, %491 ], [ -1, %495 ]
  %498 = load double, ptr %12, align 8, !tbaa !9
  %499 = load double, ptr %14, align 8, !tbaa !9
  %500 = load double, ptr %8, align 8, !tbaa !9
  %501 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 190), align 4, !tbaa !31
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %473, i32 noundef 28, ptr noundef @.str.228, i32 noundef %476, i32 noundef %485, i32 noundef %488, i32 noundef %497, double noundef %498, double noundef %499, double noundef %500, i32 noundef %501)
  br label %502

502:                                              ; preds = %496, %469
  br label %645

503:                                              ; preds = %450, %447
  %504 = load i32, ptr %22, align 4, !tbaa !11
  %505 = icmp ne i32 %504, 0
  br i1 %505, label %506, label %555

506:                                              ; preds = %503
  %507 = load double, ptr %12, align 8, !tbaa !9
  %508 = load double, ptr %14, align 8, !tbaa !9
  %509 = fcmp olt double %507, %508
  br i1 %509, label %510, label %512

510:                                              ; preds = %506
  %511 = load double, ptr %14, align 8, !tbaa !9
  br label %514

512:                                              ; preds = %506
  %513 = load double, ptr %12, align 8, !tbaa !9
  br label %514

514:                                              ; preds = %512, %510
  %515 = phi double [ %511, %510 ], [ %513, %512 ]
  store double %515, ptr %20, align 8, !tbaa !9
  %516 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 31), align 8, !tbaa !25
  %517 = add nsw i32 %516, 1
  store i32 %517, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 31), align 8, !tbaa !25
  %518 = load ptr, ptr %6, align 8, !tbaa !5
  %519 = load ptr, ptr %7, align 8, !tbaa !5
  %520 = load double, ptr %20, align 8, !tbaa !9
  %521 = load double, ptr %8, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %518, ptr noundef %519, i32 noundef 3, double noundef %520, double noundef %521)
  %522 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 29), align 8, !tbaa !28
  %523 = icmp ne i32 %522, 0
  br i1 %523, label %524, label %554

524:                                              ; preds = %514
  %525 = load ptr, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 158), align 8, !tbaa !29
  %526 = load ptr, ptr %6, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.facetT, ptr %526, i32 0, i32 14
  %528 = load i32, ptr %527, align 4, !tbaa !30
  %529 = load ptr, ptr %26, align 8, !tbaa !5
  %530 = icmp ne ptr %529, null
  br i1 %530, label %531, label %535

531:                                              ; preds = %524
  %532 = load ptr, ptr %26, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.vertexT, ptr %532, i32 0, i32 4
  %534 = load i32, ptr %533, align 8, !tbaa !32
  br label %536

535:                                              ; preds = %524
  br label %536

536:                                              ; preds = %535, %531
  %537 = phi i32 [ %534, %531 ], [ -1, %535 ]
  %538 = load ptr, ptr %7, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.facetT, ptr %538, i32 0, i32 14
  %540 = load i32, ptr %539, align 4, !tbaa !30
  %541 = load ptr, ptr %27, align 8, !tbaa !5
  %542 = icmp ne ptr %541, null
  br i1 %542, label %543, label %547

543:                                              ; preds = %536
  %544 = load ptr, ptr %27, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.vertexT, ptr %544, i32 0, i32 4
  %546 = load i32, ptr %545, align 8, !tbaa !32
  br label %548

547:                                              ; preds = %536
  br label %548

548:                                              ; preds = %547, %543
  %549 = phi i32 [ %546, %543 ], [ -1, %547 ]
  %550 = load double, ptr %12, align 8, !tbaa !9
  %551 = load double, ptr %14, align 8, !tbaa !9
  %552 = load double, ptr %8, align 8, !tbaa !9
  %553 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 190), align 4, !tbaa !31
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %525, i32 noundef 29, ptr noundef @.str.229, i32 noundef %528, i32 noundef %537, i32 noundef %540, i32 noundef %549, double noundef %550, double noundef %551, double noundef %552, i32 noundef %553)
  br label %554

554:                                              ; preds = %548, %514
  br label %644

555:                                              ; preds = %503
  %556 = load double, ptr %12, align 8, !tbaa !9
  %557 = load double, ptr %14, align 8, !tbaa !9
  %558 = fcmp olt double %556, %557
  br i1 %558, label %559, label %561

559:                                              ; preds = %555
  %560 = load double, ptr %14, align 8, !tbaa !9
  br label %563

561:                                              ; preds = %555
  %562 = load double, ptr %12, align 8, !tbaa !9
  br label %563

563:                                              ; preds = %561, %559
  %564 = phi double [ %560, %559 ], [ %562, %561 ]
  %565 = load double, ptr %11, align 8, !tbaa !9
  %566 = fneg double %565
  %567 = load double, ptr %13, align 8, !tbaa !9
  %568 = fneg double %567
  %569 = fcmp olt double %566, %568
  br i1 %569, label %570, label %573

570:                                              ; preds = %563
  %571 = load double, ptr %13, align 8, !tbaa !9
  %572 = fneg double %571
  br label %576

573:                                              ; preds = %563
  %574 = load double, ptr %11, align 8, !tbaa !9
  %575 = fneg double %574
  br label %576

576:                                              ; preds = %573, %570
  %577 = phi double [ %572, %570 ], [ %575, %573 ]
  %578 = fcmp olt double %564, %577
  br i1 %578, label %579, label %593

579:                                              ; preds = %576
  %580 = load double, ptr %11, align 8, !tbaa !9
  %581 = fneg double %580
  %582 = load double, ptr %13, align 8, !tbaa !9
  %583 = fneg double %582
  %584 = fcmp olt double %581, %583
  br i1 %584, label %585, label %588

585:                                              ; preds = %579
  %586 = load double, ptr %13, align 8, !tbaa !9
  %587 = fneg double %586
  br label %591

588:                                              ; preds = %579
  %589 = load double, ptr %11, align 8, !tbaa !9
  %590 = fneg double %589
  br label %591

591:                                              ; preds = %588, %585
  %592 = phi double [ %587, %585 ], [ %590, %588 ]
  br label %603

593:                                              ; preds = %576
  %594 = load double, ptr %12, align 8, !tbaa !9
  %595 = load double, ptr %14, align 8, !tbaa !9
  %596 = fcmp olt double %594, %595
  br i1 %596, label %597, label %599

597:                                              ; preds = %593
  %598 = load double, ptr %14, align 8, !tbaa !9
  br label %601

599:                                              ; preds = %593
  %600 = load double, ptr %12, align 8, !tbaa !9
  br label %601

601:                                              ; preds = %599, %597
  %602 = phi double [ %598, %597 ], [ %600, %599 ]
  br label %603

603:                                              ; preds = %601, %591
  %604 = phi double [ %592, %591 ], [ %602, %601 ]
  store double %604, ptr %20, align 8, !tbaa !9
  %605 = load i32, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 37), align 8, !tbaa !25
  %606 = add nsw i32 %605, 1
  store i32 %606, ptr getelementptr inbounds ([249 x %union.intrealT], ptr @qh_qhstat, i64 0, i64 37), align 8, !tbaa !25
  %607 = load ptr, ptr %6, align 8, !tbaa !5
  %608 = load ptr, ptr %7, align 8, !tbaa !5
  %609 = load double, ptr %20, align 8, !tbaa !9
  %610 = load double, ptr %8, align 8, !tbaa !9
  call void @qh_appendmergeset(ptr noundef %607, ptr noundef %608, i32 noundef 1, double noundef %609, double noundef %610)
  %611 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 29), align 8, !tbaa !28
  %612 = icmp sge i32 %611, 2
  br i1 %612, label %613, label %643

613:                                              ; preds = %603
  %614 = load ptr, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 158), align 8, !tbaa !29
  %615 = load ptr, ptr %6, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.facetT, ptr %615, i32 0, i32 14
  %617 = load i32, ptr %616, align 4, !tbaa !30
  %618 = load ptr, ptr %26, align 8, !tbaa !5
  %619 = icmp ne ptr %618, null
  br i1 %619, label %620, label %624

620:                                              ; preds = %613
  %621 = load ptr, ptr %26, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.vertexT, ptr %621, i32 0, i32 4
  %623 = load i32, ptr %622, align 8, !tbaa !32
  br label %625

624:                                              ; preds = %613
  br label %625

625:                                              ; preds = %624, %620
  %626 = phi i32 [ %623, %620 ], [ -1, %624 ]
  %627 = load ptr, ptr %7, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.facetT, ptr %627, i32 0, i32 14
  %629 = load i32, ptr %628, align 4, !tbaa !30
  %630 = load ptr, ptr %27, align 8, !tbaa !5
  %631 = icmp ne ptr %630, null
  br i1 %631, label %632, label %636

632:                                              ; preds = %625
  %633 = load ptr, ptr %27, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.vertexT, ptr %633, i32 0, i32 4
  %635 = load i32, ptr %634, align 8, !tbaa !32
  br label %637

636:                                              ; preds = %625
  br label %637

637:                                              ; preds = %636, %632
  %638 = phi i32 [ %635, %632 ], [ -1, %636 ]
  %639 = load double, ptr %12, align 8, !tbaa !9
  %640 = load double, ptr %14, align 8, !tbaa !9
  %641 = load double, ptr %8, align 8, !tbaa !9
  %642 = load i32, ptr getelementptr inbounds (%struct.qhT, ptr @qh_qh, i32 0, i32 190), align 4, !tbaa !31
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %614, i32 noundef 2099, ptr noundef @.str.230, i32 noundef %617, i32 noundef %626, i32 noundef %629, i32 noundef %638, double noundef %639, double noundef %640, double noundef %641, i32 noundef %642)
  br label %643

643:                                              ; preds = %637, %603
  br label %644

644:                                              ; preds = %643, %554
  br label %645

645:                                              ; preds = %644, %502
  br label %646

646:                                              ; preds = %645, %446
  store i32 1, ptr %5, align 4
  store i32 1, ptr %28, align 4
  br label %647

647:                                              ; preds = %646, %374, %326, %291, %218, %165
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  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 8, 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
  %648 = load i32, ptr %5, align 4
  ret i32 %648
}

declare ptr @qh_furthestvertex(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

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, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !10, i64 8}
!14 = !{!"facetT", !10, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !7, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 113, !12, i64 113, !12, i64 113, !12, i64 113, !12, i64 113, !12, i64 113, !12, i64 113, !12, i64 114, !12, i64 114, !12, i64 114, !12, i64 114, !12, i64 114, !12, i64 114, !12, i64 114, !12, i64 114, !12, i64 115, !12, i64 115, !12, i64 115, !12, i64 115, !12, i64 115, !12, i64 115, !12, i64 115, !12, i64 115}
!15 = !{!16, !10, i64 1888}
!16 = !{!"qhT", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !10, i64 24, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !10, i64 64, !10, i64 72, !12, i64 80, !12, i64 84, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !6, i64 104, !12, i64 112, !12, i64 116, !6, i64 120, !12, i64 128, !12, i64 132, !12, i64 136, !12, i64 140, !12, i64 144, !12, i64 148, !12, i64 152, !10, i64 160, !10, i64 168, !12, i64 176, !12, i64 180, !12, i64 184, !12, i64 188, !10, i64 192, !10, i64 200, !12, i64 208, !12, i64 212, !10, i64 216, !12, i64 224, !12, i64 228, !12, i64 232, !12, i64 236, !12, i64 240, !12, i64 244, !12, i64 248, !12, i64 252, !12, i64 256, !12, i64 260, !12, i64 264, !12, i64 268, !12, i64 272, !12, i64 276, !12, i64 280, !12, i64 284, !12, i64 288, !12, i64 292, !12, i64 296, !7, i64 300, !12, i64 416, !12, i64 420, !12, i64 424, !12, i64 428, !12, i64 432, !12, i64 436, !12, i64 440, !12, i64 444, !10, i64 448, !10, i64 456, !10, i64 464, !12, i64 472, !12, i64 476, !12, i64 480, !12, i64 484, !12, i64 488, !12, i64 492, !12, i64 496, !12, i64 500, !12, i64 504, !12, i64 508, !12, i64 512, !12, i64 516, !12, i64 520, !12, i64 524, !12, i64 528, !12, i64 532, !12, i64 536, !12, i64 540, !12, i64 544, !10, i64 552, !12, i64 560, !12, i64 564, !12, i64 568, !12, i64 572, !12, i64 576, !12, i64 580, !12, i64 584, !12, i64 588, !10, i64 592, !12, i64 600, !6, i64 608, !6, i64 616, !12, i64 624, !12, i64 628, !12, i64 632, !12, i64 636, !12, i64 640, !6, i64 648, !12, i64 656, !6, i64 664, !12, i64 672, !7, i64 676, !12, i64 932, !7, i64 936, !7, i64 1192, !12, i64 1704, !12, i64 1708, !12, i64 1712, !12, i64 1716, !12, i64 1720, !12, i64 1724, !6, i64 1728, !6, i64 1736, !6, i64 1744, !6, i64 1752, !10, i64 1760, !10, i64 1768, !10, i64 1776, !10, i64 1784, !10, i64 1792, !10, i64 1800, !10, i64 1808, !10, i64 1816, !10, i64 1824, !10, i64 1832, !10, i64 1840, !10, i64 1848, !10, i64 1856, !10, i64 1864, !6, i64 1872, !10, i64 1880, !10, i64 1888, !10, i64 1896, !10, i64 1904, !12, i64 1912, !7, i64 1916, !7, i64 1928, !7, i64 2128, !7, i64 2168, !7, i64 2368, !6, i64 2408, !6, i64 2416, !6, i64 2424, !6, i64 2432, !12, i64 2440, !12, i64 2444, !12, i64 2448, !6, i64 2456, !6, i64 2464, !6, i64 2472, !6, i64 2480, !6, i64 2488, !12, i64 2496, !12, i64 2500, !6, i64 2504, !12, i64 2512, !6, i64 2520, !12, i64 2528, !6, i64 2536, !6, i64 2544, !6, i64 2552, !6, i64 2560, !12, i64 2568, !12, i64 2572, !12, i64 2576, !12, i64 2580, !12, i64 2584, !12, i64 2588, !12, i64 2592, !12, i64 2596, !17, i64 2600, !12, i64 2608, !12, i64 2612, !12, i64 2616, !12, i64 2620, !12, i64 2624, !6, i64 2632, !6, i64 2640, !12, i64 2648, !12, i64 2652, !12, i64 2656, !10, i64 2664, !12, i64 2672, !10, i64 2680, !10, i64 2688, !10, i64 2696, !12, i64 2704, !12, i64 2708, !12, i64 2712, !12, i64 2716, !12, i64 2720, !10, i64 2728, !10, i64 2736, !12, i64 2744, !12, i64 2748, !12, i64 2752, !12, i64 2756, !12, i64 2760, !12, i64 2764, !10, i64 2768, !10, i64 2776, !12, i64 2784, !12, i64 2788, !12, i64 2792, !12, i64 2796, !6, i64 2800, !6, i64 2808, !6, i64 2816, !6, i64 2824, !6, i64 2832, !6, i64 2840, !6, i64 2848, !6, i64 2856, !6, i64 2864, !12, i64 2872, !6, i64 2880, !6, i64 2888, !12, i64 2896, !12, i64 2900, !12, i64 2904, !6, i64 2912, !10, i64 2920, !10, i64 2928, !10, i64 2936, !10, i64 2944, !12, i64 2952, !12, i64 2956, !12, i64 2960, !12, i64 2964, !12, i64 2968, !12, i64 2972, !6, i64 2976, !6, i64 2984, !12, i64 2992}
!17 = !{!"long", !7, i64 0}
!18 = !{!16, !10, i64 1784}
!19 = !{!16, !10, i64 2696}
!20 = !{!16, !10, i64 168}
!21 = !{!16, !12, i64 180}
!22 = !{!16, !12, i64 2744}
!23 = !{!16, !10, i64 1768}
!24 = !{!14, !6, i64 40}
!25 = !{!7, !7, i64 0}
!26 = !{!16, !12, i64 16}
!27 = !{!14, !6, i64 24}
!28 = !{!16, !12, i64 136}
!29 = !{!16, !6, i64 2424}
!30 = !{!14, !12, i64 108}
!31 = !{!16, !12, i64 2620}
!32 = !{!33, !12, i64 32}
!33 = !{!"vertexT", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 40, !12, i64 40, !12, i64 40, !12, i64 40, !12, i64 40}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.qhT = type { i32, i32, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, i32, i32, ptr, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, double, double, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [29 x i32], i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, double, i32, ptr, ptr, i32, i32, i32, i32, i32, ptr, i32, ptr, i32, [256 x i8], i32, [256 x i8], [512 x i8], i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, double, double, double, double, double, double, double, double, double, double, double, double, double, double, ptr, double, double, double, double, i32, [6 x i8], [1 x %struct.__jmp_buf_tag], [40 x i8], [1 x %struct.__jmp_buf_tag], [40 x i8], ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, i32, ptr, i32, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, double, i32, double, double, double, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, i32, i32, i32, ptr, double, double, double, double, i32, i32, i32, i32, i32, i32, ptr, ptr, i32 }
%struct.__jmp_buf_tag = type { [8 x i64], i32, %struct.__sigset_t }
%struct.__sigset_t = type { [16 x i64] }
%struct.qhstatT = type { [249 x %union.intrealT], [259 x i8], [249 x ptr], [249 x i16], [249 x i8], [249 x i8], [9 x %union.intrealT], i32, i32, i32, i32, double }
%union.intrealT = type { double }

@qh_qh = external local_unnamed_addr global %struct.qhT, align 8
@qh_qhstat = external local_unnamed_addr global %struct.qhstatT, align 8
@.str.226 = external hidden unnamed_addr constant [120 x i8], align 1
@.str.227 = external hidden unnamed_addr constant [124 x i8], align 1
@.str.228 = external hidden unnamed_addr constant [125 x i8], align 1
@.str.229 = external hidden unnamed_addr constant [116 x i8], align 1
@.str.230 = external hidden unnamed_addr constant [117 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

declare void @qh_fprintf(ptr noundef, i32 noundef, ptr noundef, ...) local_unnamed_addr #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: nounwind uwtable
declare dso_local void @qh_appendmergeset(ptr noundef, ptr noundef, i32 noundef, double noundef, double noundef) local_unnamed_addr #2

declare void @qh_distplane(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @qh_getcentrum(ptr noundef) local_unnamed_addr #1

declare double @qh_getangle(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @qh_test_nonsimplicial_merge(ptr noundef %0, ptr noundef %1, double noundef %2, i32 noundef %3) local_unnamed_addr #2 {
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  %11 = getelementptr inbounds i8, ptr %1, i64 8
  %12 = load double, ptr %11, align 8, !tbaa !5
  %13 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 1888), align 8, !tbaa !12
  %14 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 1784), align 8, !tbaa !15
  %15 = fadd double %13, %14
  %16 = fcmp olt double %12, %15
  %. = select i1 %16, double %15, double %12
  %17 = getelementptr inbounds i8, ptr %0, i64 8
  %18 = load double, ptr %17, align 8, !tbaa !5
  %19 = fcmp olt double %., %18
  %20 = select i1 %19, double %18, double %.
  %21 = fmul double %20, 2.000000e+01
  %22 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2696), align 8
  %23 = fneg double %22
  %24 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 168), align 8
  %25 = fcmp ogt double %24, %23
  %26 = select i1 %25, double %24, double %23
  %27 = fmul double %26, 1.000000e+01
  %28 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 180), align 4, !tbaa !16
  %29 = icmp eq i32 %28, 0
  %30 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2744), align 8
  %31 = icmp ne i32 %30, 0
  %or.cond = select i1 %29, i1 true, i1 %31
  br i1 %or.cond, label %42, label %32

32:                                               ; preds = %4
  %33 = getelementptr inbounds i8, ptr %0, i64 112
  %34 = load i32, ptr %33, align 8
  %35 = and i32 %34, 511
  %36 = icmp ugt i32 %35, 10
  br i1 %36, label %44, label %37

37:                                               ; preds = %32
  %38 = getelementptr inbounds i8, ptr %1, i64 112
  %39 = load i32, ptr %38, align 8
  %40 = and i32 %39, 511
  %41 = icmp ugt i32 %40, 10
  br i1 %41, label %44, label %42

42:                                               ; preds = %37, %4
  %43 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 1768), align 8, !tbaa !17
  br label %44

44:                                               ; preds = %32, %37, %42
  %.0157 = phi double [ %43, %42 ], [ %20, %37 ], [ %20, %32 ]
  %45 = getelementptr inbounds i8, ptr %0, i64 40
  %46 = load ptr, ptr %45, align 8, !tbaa !18
  %.not = icmp eq ptr %46, null
  br i1 %.not, label %47, label %49

47:                                               ; preds = %44
  %48 = tail call ptr @qh_getcentrum(ptr noundef nonnull %0) #3
  store ptr %48, ptr %45, align 8, !tbaa !18
  br label %49

49:                                               ; preds = %47, %44
  %50 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 168), align 8, !tbaa !19
  %51 = add nsw i32 %50, 1
  store i32 %51, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 168), align 8, !tbaa !19
  %52 = load ptr, ptr %45, align 8, !tbaa !18
  call void @qh_distplane(ptr noundef %52, ptr noundef nonnull %1, ptr noundef nonnull %5) #3
  %53 = load double, ptr %5, align 8, !tbaa !20
  %54 = fcmp ule double %53, %.0157
  br i1 %54, label %55, label %63

55:                                               ; preds = %49
  %56 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 1768), align 8, !tbaa !17
  %57 = fneg double %56
  %58 = fcmp ult double %53, %57
  br i1 %58, label %59, label %63

59:                                               ; preds = %55
  %60 = fneg double %27
  %61 = fcmp olt double %53, %60
  br i1 %61, label %62, label %63

62:                                               ; preds = %59
  br label %63

63:                                               ; preds = %55, %49, %62, %59
  %.0151 = phi i32 [ 0, %62 ], [ 0, %59 ], [ 0, %49 ], [ 1, %55 ]
  %.not191 = phi i1 [ false, %62 ], [ true, %59 ], [ true, %49 ], [ true, %55 ]
  %.0150 = phi i32 [ 1, %62 ], [ 0, %59 ], [ 0, %49 ], [ 0, %55 ]
  %64 = getelementptr inbounds i8, ptr %1, i64 40
  %65 = load ptr, ptr %64, align 8, !tbaa !18
  %.not190 = icmp eq ptr %65, null
  br i1 %.not190, label %66, label %68

66:                                               ; preds = %63
  %67 = call ptr @qh_getcentrum(ptr noundef nonnull %1) #3
  store ptr %67, ptr %64, align 8, !tbaa !18
  br label %68

68:                                               ; preds = %66, %63
  %69 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 168), align 8, !tbaa !19
  %70 = add nsw i32 %69, 1
  store i32 %70, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 168), align 8, !tbaa !19
  %71 = load ptr, ptr %64, align 8, !tbaa !18
  call void @qh_distplane(ptr noundef %71, ptr noundef nonnull %0, ptr noundef nonnull %10) #3
  %72 = load double, ptr %10, align 8
  %73 = fcmp ogt double %72, %.0157
  br i1 %73, label %.thread, label %74

74:                                               ; preds = %68
  %75 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 1768), align 8, !tbaa !17
  %76 = fneg double %75
  %77 = fcmp ult double %72, %76
  br i1 %77, label %78, label %81

78:                                               ; preds = %74
  %79 = fneg double %27
  %80 = fcmp uge double %72, %79
  %brmerge222 = or i1 %.not191, %80
  %.0150.mux = select i1 %80, i32 %.0150, i32 1
  br i1 %brmerge222, label %81, label %309

81:                                               ; preds = %78, %74
  %.1152 = phi i32 [ %.0151, %78 ], [ 1, %74 ]
  %.1 = phi i32 [ %.0150.mux, %78 ], [ %.0150, %74 ]
  br i1 %54, label %110, label %.thread

.thread:                                          ; preds = %68, %81
  %82 = icmp eq i32 %3, 0
  %83 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 16), align 8
  %84 = icmp ne i32 %83, 0
  %or.cond3 = select i1 %82, i1 %84, i1 false
  br i1 %or.cond3, label %85, label %93

85:                                               ; preds = %.thread
  %86 = getelementptr inbounds i8, ptr %0, i64 24
  %87 = load ptr, ptr %86, align 8, !tbaa !21
  %88 = getelementptr inbounds i8, ptr %1, i64 24
  %89 = load ptr, ptr %88, align 8, !tbaa !21
  %90 = call double @qh_getangle(ptr noundef %87, ptr noundef %89) #3
  %91 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 56), align 8, !tbaa !19
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 56), align 8, !tbaa !19
  %.pre = load double, ptr %10, align 8
  br label %93

93:                                               ; preds = %85, %.thread
  %94 = phi double [ %.pre, %85 ], [ %72, %.thread ]
  %.0159 = phi double [ %90, %85 ], [ %2, %.thread ]
  %95 = load double, ptr %5, align 8
  %96 = fcmp olt double %95, %94
  %97 = select i1 %96, double %94, double %95
  %98 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 248), align 8, !tbaa !19
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 248), align 8, !tbaa !19
  call void @qh_appendmergeset(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef 3, double noundef %97, double noundef %.0159)
  %100 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 136), align 8, !tbaa !22
  %.not211 = icmp eq i32 %100, 0
  br i1 %.not211, label %309, label %101

101:                                              ; preds = %93
  %102 = load ptr, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2424), align 8, !tbaa !23
  %103 = getelementptr inbounds i8, ptr %0, i64 108
  %104 = load i32, ptr %103, align 4, !tbaa !24
  %105 = getelementptr inbounds i8, ptr %1, i64 108
  %106 = load i32, ptr %105, align 4, !tbaa !24
  %107 = load double, ptr %5, align 8, !tbaa !20
  %108 = load double, ptr %10, align 8, !tbaa !20
  %109 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2620), align 4, !tbaa !25
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %102, i32 noundef 18, ptr noundef nonnull @.str.226, i32 noundef %104, i32 noundef %106, double noundef %107, double noundef %108, double noundef %.0159, i32 noundef %109) #3
  br label %309

110:                                              ; preds = %81
  %.not193 = icmp eq i32 %.1, 0
  br i1 %.not193, label %123, label %111

111:                                              ; preds = %110
  %112 = load double, ptr %5, align 8, !tbaa !20
  %113 = fneg double %27
  %114 = fcmp olt double %112, %113
  br i1 %114, label %115, label %119

115:                                              ; preds = %111
  store double %112, ptr %7, align 8, !tbaa !20
  store double %112, ptr %6, align 8, !tbaa !20
  %116 = call ptr @qh_furthestvertex(ptr noundef nonnull %1, ptr noundef nonnull %0, ptr noundef nonnull %9, ptr noundef nonnull %8) #3
  %.not197 = icmp eq ptr %116, null
  br i1 %.not197, label %117, label %140

117:                                              ; preds = %115
  %118 = load double, ptr %9, align 8, !tbaa !20
  call void @qh_appendmergeset(ptr noundef nonnull %1, ptr noundef nonnull %0, i32 noundef 11, double noundef %118, double noundef 2.000000e+00)
  br label %137

119:                                              ; preds = %111
  store double %72, ptr %9, align 8, !tbaa !20
  store double %72, ptr %8, align 8, !tbaa !20
  %120 = call ptr @qh_furthestvertex(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %7, ptr noundef nonnull %6) #3
  %.not196 = icmp eq ptr %120, null
  br i1 %.not196, label %121, label %140

121:                                              ; preds = %119
  %122 = load double, ptr %7, align 8, !tbaa !20
  call void @qh_appendmergeset(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef 11, double noundef %122, double noundef 2.000000e+00)
  br label %137

123:                                              ; preds = %110
  %124 = call ptr @qh_furthestvertex(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %7, ptr noundef nonnull %6) #3
  %.not194 = icmp eq ptr %124, null
  br i1 %.not194, label %135, label %125

125:                                              ; preds = %123
  %126 = call ptr @qh_furthestvertex(ptr noundef nonnull %1, ptr noundef nonnull %0, ptr noundef nonnull %9, ptr noundef nonnull %8) #3
  %.not195 = icmp eq ptr %126, null
  br i1 %.not195, label %127, label %129

127:                                              ; preds = %125
  %128 = load double, ptr %9, align 8, !tbaa !20
  call void @qh_appendmergeset(ptr noundef nonnull %1, ptr noundef nonnull %0, i32 noundef 11, double noundef %128, double noundef 2.000000e+00)
  br label %137

129:                                              ; preds = %125
  %130 = load double, ptr %6, align 8, !tbaa !20
  %131 = fneg double %27
  %132 = fcmp olt double %130, %131
  %133 = load double, ptr %8, align 8
  %134 = fcmp olt double %133, %131
  %or.cond213 = select i1 %132, i1 true, i1 %134
  %not.or.cond213 = xor i1 %or.cond213, true
  br label %140

135:                                              ; preds = %123
  %136 = load double, ptr %7, align 8, !tbaa !20
  call void @qh_appendmergeset(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef 11, double noundef %136, double noundef 2.000000e+00)
  br label %137

137:                                              ; preds = %117, %121, %127, %135
  %138 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 1520), align 8, !tbaa !19
  %139 = add nsw i32 %138, 1
  store i32 %139, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 1520), align 8, !tbaa !19
  br label %309

140:                                              ; preds = %119, %115, %129
  %.not199 = phi i1 [ false, %115 ], [ false, %119 ], [ %not.or.cond213, %129 ]
  %141 = phi i1 [ true, %115 ], [ true, %119 ], [ %or.cond213, %129 ]
  %.0148 = phi ptr [ null, %115 ], [ %120, %119 ], [ %124, %129 ]
  %.0 = phi ptr [ %116, %115 ], [ null, %119 ], [ %126, %129 ]
  %142 = load double, ptr %7, align 8, !tbaa !20
  %143 = fcmp ogt double %142, %21
  br i1 %143, label %150, label %144

144:                                              ; preds = %140
  %145 = load double, ptr %9, align 8, !tbaa !20
  %146 = fcmp ogt double %145, %21
  %brmerge = or i1 %.not199, %146
  %not.239 = xor i1 %146, true
  br i1 %brmerge, label %150, label %147

147:                                              ; preds = %144
  %148 = fcmp ogt double %142, %20
  %149 = fcmp ogt double %145, %20
  %or.cond215 = or i1 %148, %149
  %not.or.cond215 = xor i1 %or.cond215, true
  br label %150

150:                                              ; preds = %147, %144, %140
  %151 = phi i1 [ %not.239, %144 ], [ false, %140 ], [ %not.or.cond215, %147 ]
  %152 = phi i1 [ %146, %144 ], [ true, %140 ], [ %or.cond215, %147 ]
  %153 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 180), align 4
  %154 = icmp eq i32 %153, 0
  %not. = xor i1 %151, true
  %or.cond5 = select i1 %not., i1 true, i1 %154
  %155 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2744), align 8
  %156 = icmp ne i32 %155, 0
  %or.cond7 = select i1 %or.cond5, i1 true, i1 %156
  br i1 %or.cond7, label %157, label %309

157:                                              ; preds = %150
  %158 = icmp ne i32 %.1152, 0
  %or.cond9 = or i1 %158, %151
  br i1 %or.cond9, label %170, label %159

159:                                              ; preds = %157
  %160 = fcmp olt double %142, %20
  br i1 %160, label %161, label %178

161:                                              ; preds = %159
  %162 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 168), align 8, !tbaa !26
  %163 = fcmp une double %162, 0.000000e+00
  br i1 %163, label %.thread237, label %164

164:                                              ; preds = %161
  %165 = fneg double %162
  %166 = load double, ptr %9, align 8, !tbaa !20
  %167 = fcmp uge double %166, %20
  %168 = load double, ptr %8, align 8
  %169 = fcmp ult double %168, %165
  %or.cond217 = select i1 %167, i1 true, i1 %169
  br i1 %or.cond217, label %178, label %.thread237

170:                                              ; preds = %157
  br i1 %158, label %.thread237, label %171

171:                                              ; preds = %170
  %172 = load double, ptr %6, align 8, !tbaa !20
  %173 = load double, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 168), align 8, !tbaa !26
  %174 = fneg double %173
  %175 = fcmp oge double %172, %174
  %176 = load double, ptr %8, align 8
  %177 = fcmp oge double %176, %174
  %or.cond219.not = select i1 %175, i1 true, i1 %177
  br label %178

178:                                              ; preds = %171, %159, %164
  %179 = phi i1 [ false, %164 ], [ false, %159 ], [ %or.cond219.not, %171 ]
  %or.cond11 = or i1 %152, %179
  br i1 %or.cond11, label %.thread237, label %309

.thread237:                                       ; preds = %161, %164, %170, %178
  %180 = phi i1 [ %179, %178 ], [ true, %170 ], [ true, %164 ], [ true, %161 ]
  %181 = icmp eq i32 %3, 0
  %182 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 16), align 8
  %183 = icmp ne i32 %182, 0
  %or.cond13 = select i1 %181, i1 %183, i1 false
  br i1 %or.cond13, label %184, label %192

184:                                              ; preds = %.thread237
  %185 = getelementptr inbounds i8, ptr %0, i64 24
  %186 = load ptr, ptr %185, align 8, !tbaa !21
  %187 = getelementptr inbounds i8, ptr %1, i64 24
  %188 = load ptr, ptr %187, align 8, !tbaa !21
  %189 = call double @qh_getangle(ptr noundef %186, ptr noundef %188) #3
  %190 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 56), align 8, !tbaa !19
  %191 = add nsw i32 %190, 1
  store i32 %191, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 56), align 8, !tbaa !19
  br label %192

192:                                              ; preds = %184, %.thread237
  %.1160 = phi double [ %189, %184 ], [ %2, %.thread237 ]
  %or.cond15 = and i1 %141, %152
  br i1 %or.cond15, label %193, label %222

193:                                              ; preds = %192
  %194 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 1848), align 8, !tbaa !19
  %195 = add nsw i32 %194, 1
  store i32 %195, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 1848), align 8, !tbaa !19
  %196 = load double, ptr %7, align 8, !tbaa !20
  %197 = load double, ptr %9, align 8, !tbaa !20
  %198 = fcmp ogt double %196, %197
  br i1 %198, label %199, label %200

199:                                              ; preds = %193
  call void @qh_appendmergeset(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef 5, double noundef %196, double noundef %.1160)
  br label %201

200:                                              ; preds = %193
  call void @qh_appendmergeset(ptr noundef nonnull %1, ptr noundef nonnull %0, i32 noundef 5, double noundef %197, double noundef %.1160)
  br label %201

201:                                              ; preds = %200, %199
  %202 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 136), align 8, !tbaa !22
  %.not208 = icmp eq i32 %202, 0
  br i1 %.not208, label %309, label %203

203:                                              ; preds = %201
  %204 = load ptr, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2424), align 8, !tbaa !23
  %205 = getelementptr inbounds i8, ptr %0, i64 108
  %206 = load i32, ptr %205, align 4, !tbaa !24
  %.not209 = icmp eq ptr %.0148, null
  br i1 %.not209, label %210, label %207

207:                                              ; preds = %203
  %208 = getelementptr inbounds i8, ptr %.0148, i64 32
  %209 = load i32, ptr %208, align 8, !tbaa !27
  br label %210

210:                                              ; preds = %203, %207
  %211 = phi i32 [ %209, %207 ], [ -1, %203 ]
  %212 = getelementptr inbounds i8, ptr %1, i64 108
  %213 = load i32, ptr %212, align 4, !tbaa !24
  %.not210 = icmp eq ptr %.0, null
  br i1 %.not210, label %217, label %214

214:                                              ; preds = %210
  %215 = getelementptr inbounds i8, ptr %.0, i64 32
  %216 = load i32, ptr %215, align 8, !tbaa !27
  br label %217

217:                                              ; preds = %210, %214
  %218 = phi i32 [ %216, %214 ], [ -1, %210 ]
  %219 = load double, ptr %7, align 8, !tbaa !20
  %220 = load double, ptr %9, align 8, !tbaa !20
  %221 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2620), align 4, !tbaa !25
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %204, i32 noundef 27, ptr noundef nonnull @.str.227, i32 noundef %206, i32 noundef %211, i32 noundef %213, i32 noundef %218, double noundef %219, double noundef %220, double noundef %.1160, i32 noundef %221) #3
  br label %309

222:                                              ; preds = %192
  %or.cond17 = and i1 %152, %180
  br i1 %or.cond17, label %223, label %252

223:                                              ; preds = %222
  %224 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 240), align 8, !tbaa !19
  %225 = add nsw i32 %224, 1
  store i32 %225, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 240), align 8, !tbaa !19
  %226 = load double, ptr %7, align 8, !tbaa !20
  %227 = load double, ptr %9, align 8, !tbaa !20
  %228 = fcmp ogt double %226, %227
  br i1 %228, label %229, label %230

229:                                              ; preds = %223
  call void @qh_appendmergeset(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef 4, double noundef %226, double noundef %.1160)
  br label %231

230:                                              ; preds = %223
  call void @qh_appendmergeset(ptr noundef nonnull %1, ptr noundef nonnull %0, i32 noundef 4, double noundef %227, double noundef %.1160)
  br label %231

231:                                              ; preds = %230, %229
  %232 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 136), align 8, !tbaa !22
  %.not205 = icmp eq i32 %232, 0
  br i1 %.not205, label %309, label %233

233:                                              ; preds = %231
  %234 = load ptr, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2424), align 8, !tbaa !23
  %235 = getelementptr inbounds i8, ptr %0, i64 108
  %236 = load i32, ptr %235, align 4, !tbaa !24
  %.not206 = icmp eq ptr %.0148, null
  br i1 %.not206, label %240, label %237

237:                                              ; preds = %233
  %238 = getelementptr inbounds i8, ptr %.0148, i64 32
  %239 = load i32, ptr %238, align 8, !tbaa !27
  br label %240

240:                                              ; preds = %233, %237
  %241 = phi i32 [ %239, %237 ], [ -1, %233 ]
  %242 = getelementptr inbounds i8, ptr %1, i64 108
  %243 = load i32, ptr %242, align 4, !tbaa !24
  %.not207 = icmp eq ptr %.0, null
  br i1 %.not207, label %247, label %244

244:                                              ; preds = %240
  %245 = getelementptr inbounds i8, ptr %.0, i64 32
  %246 = load i32, ptr %245, align 8, !tbaa !27
  br label %247

247:                                              ; preds = %240, %244
  %248 = phi i32 [ %246, %244 ], [ -1, %240 ]
  %249 = load double, ptr %7, align 8, !tbaa !20
  %250 = load double, ptr %9, align 8, !tbaa !20
  %251 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2620), align 4, !tbaa !25
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %234, i32 noundef 28, ptr noundef nonnull @.str.228, i32 noundef %236, i32 noundef %241, i32 noundef %243, i32 noundef %248, double noundef %249, double noundef %250, double noundef %.1160, i32 noundef %251) #3
  br label %309

252:                                              ; preds = %222
  %253 = load double, ptr %7, align 8
  %254 = load double, ptr %9, align 8
  %255 = fcmp olt double %253, %254
  %256 = select i1 %255, double %254, double %253
  br i1 %152, label %257, label %280

257:                                              ; preds = %252
  %258 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 248), align 8, !tbaa !19
  %259 = add nsw i32 %258, 1
  store i32 %259, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 248), align 8, !tbaa !19
  call void @qh_appendmergeset(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef 3, double noundef %256, double noundef %.1160)
  %260 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 136), align 8, !tbaa !22
  %.not202 = icmp eq i32 %260, 0
  br i1 %.not202, label %309, label %261

261:                                              ; preds = %257
  %262 = load ptr, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2424), align 8, !tbaa !23
  %263 = getelementptr inbounds i8, ptr %0, i64 108
  %264 = load i32, ptr %263, align 4, !tbaa !24
  %.not203 = icmp eq ptr %.0148, null
  br i1 %.not203, label %268, label %265

265:                                              ; preds = %261
  %266 = getelementptr inbounds i8, ptr %.0148, i64 32
  %267 = load i32, ptr %266, align 8, !tbaa !27
  br label %268

268:                                              ; preds = %261, %265
  %269 = phi i32 [ %267, %265 ], [ -1, %261 ]
  %270 = getelementptr inbounds i8, ptr %1, i64 108
  %271 = load i32, ptr %270, align 4, !tbaa !24
  %.not204 = icmp eq ptr %.0, null
  br i1 %.not204, label %275, label %272

272:                                              ; preds = %268
  %273 = getelementptr inbounds i8, ptr %.0, i64 32
  %274 = load i32, ptr %273, align 8, !tbaa !27
  br label %275

275:                                              ; preds = %268, %272
  %276 = phi i32 [ %274, %272 ], [ -1, %268 ]
  %277 = load double, ptr %7, align 8, !tbaa !20
  %278 = load double, ptr %9, align 8, !tbaa !20
  %279 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2620), align 4, !tbaa !25
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %262, i32 noundef 29, ptr noundef nonnull @.str.229, i32 noundef %264, i32 noundef %269, i32 noundef %271, i32 noundef %276, double noundef %277, double noundef %278, double noundef %.1160, i32 noundef %279) #3
  br label %309

280:                                              ; preds = %252
  %281 = load double, ptr %6, align 8
  %282 = load double, ptr %8, align 8
  %283 = fcmp ogt double %281, %282
  %.v = select i1 %283, double %282, double %281
  %284 = fneg double %.v
  %285 = fcmp olt double %256, %284
  %.220 = select i1 %285, double %284, double %256
  %286 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 296), align 8, !tbaa !19
  %287 = add nsw i32 %286, 1
  store i32 %287, ptr getelementptr inbounds (i8, ptr @qh_qhstat, i64 296), align 8, !tbaa !19
  call void @qh_appendmergeset(ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef 1, double noundef %.220, double noundef %.1160)
  %288 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 136), align 8, !tbaa !22
  %289 = icmp sgt i32 %288, 1
  br i1 %289, label %290, label %309

290:                                              ; preds = %280
  %291 = load ptr, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2424), align 8, !tbaa !23
  %292 = getelementptr inbounds i8, ptr %0, i64 108
  %293 = load i32, ptr %292, align 4, !tbaa !24
  %.not200 = icmp eq ptr %.0148, null
  br i1 %.not200, label %297, label %294

294:                                              ; preds = %290
  %295 = getelementptr inbounds i8, ptr %.0148, i64 32
  %296 = load i32, ptr %295, align 8, !tbaa !27
  br label %297

297:                                              ; preds = %290, %294
  %298 = phi i32 [ %296, %294 ], [ -1, %290 ]
  %299 = getelementptr inbounds i8, ptr %1, i64 108
  %300 = load i32, ptr %299, align 4, !tbaa !24
  %.not201 = icmp eq ptr %.0, null
  br i1 %.not201, label %304, label %301

301:                                              ; preds = %297
  %302 = getelementptr inbounds i8, ptr %.0, i64 32
  %303 = load i32, ptr %302, align 8, !tbaa !27
  br label %304

304:                                              ; preds = %297, %301
  %305 = phi i32 [ %303, %301 ], [ -1, %297 ]
  %306 = load double, ptr %7, align 8, !tbaa !20
  %307 = load double, ptr %9, align 8, !tbaa !20
  %308 = load i32, ptr getelementptr inbounds (i8, ptr @qh_qh, i64 2620), align 4, !tbaa !25
  call void (ptr, i32, ptr, ...) @qh_fprintf(ptr noundef %291, i32 noundef 2099, ptr noundef nonnull @.str.230, i32 noundef %293, i32 noundef %298, i32 noundef %300, i32 noundef %305, double noundef %306, double noundef %307, double noundef %.1160, i32 noundef %308) #3
  br label %309

309:                                              ; preds = %78, %217, %201, %275, %257, %304, %280, %231, %247, %178, %150, %93, %101, %137
  %.0158 = phi i32 [ 1, %137 ], [ 1, %101 ], [ 1, %93 ], [ 0, %150 ], [ 0, %178 ], [ 1, %247 ], [ 1, %231 ], [ 1, %280 ], [ 1, %304 ], [ 1, %257 ], [ 1, %275 ], [ 1, %201 ], [ 1, %217 ], [ 0, %78 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3
  ret i32 %.0158
}

declare ptr @qh_furthestvertex(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

attributes #0 = { mustprogress 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, !7, i64 8}
!6 = !{!"facetT", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !8, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 113, !11, i64 113, !11, i64 113, !11, i64 113, !11, i64 113, !11, i64 113, !11, i64 113, !11, i64 114, !11, i64 114, !11, i64 114, !11, i64 114, !11, i64 114, !11, i64 114, !11, i64 114, !11, i64 114, !11, i64 115, !11, i64 115, !11, i64 115, !11, i64 115, !11, i64 115, !11, i64 115, !11, i64 115, !11, i64 115}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!13, !7, i64 1888}
!13 = !{!"qhT", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !7, i64 24, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !7, i64 64, !7, i64 72, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !10, i64 104, !11, i64 112, !11, i64 116, !10, i64 120, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !7, i64 160, !7, i64 168, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !7, i64 192, !7, i64 200, !11, i64 208, !11, i64 212, !7, i64 216, !11, i64 224, !11, i64 228, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !11, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !8, i64 300, !11, i64 416, !11, i64 420, !11, i64 424, !11, i64 428, !11, i64 432, !11, i64 436, !11, i64 440, !11, i64 444, !7, i64 448, !7, i64 456, !7, i64 464, !11, i64 472, !11, i64 476, !11, i64 480, !11, i64 484, !11, i64 488, !11, i64 492, !11, i64 496, !11, i64 500, !11, i64 504, !11, i64 508, !11, i64 512, !11, i64 516, !11, i64 520, !11, i64 524, !11, i64 528, !11, i64 532, !11, i64 536, !11, i64 540, !11, i64 544, !7, i64 552, !11, i64 560, !11, i64 564, !11, i64 568, !11, i64 572, !11, i64 576, !11, i64 580, !11, i64 584, !11, i64 588, !7, i64 592, !11, i64 600, !10, i64 608, !10, i64 616, !11, i64 624, !11, i64 628, !11, i64 632, !11, i64 636, !11, i64 640, !10, i64 648, !11, i64 656, !10, i64 664, !11, i64 672, !8, i64 676, !11, i64 932, !8, i64 936, !8, i64 1192, !11, i64 1704, !11, i64 1708, !11, i64 1712, !11, i64 1716, !11, i64 1720, !11, i64 1724, !10, i64 1728, !10, i64 1736, !10, i64 1744, !10, i64 1752, !7, i64 1760, !7, i64 1768, !7, i64 1776, !7, i64 1784, !7, i64 1792, !7, i64 1800, !7, i64 1808, !7, i64 1816, !7, i64 1824, !7, i64 1832, !7, i64 1840, !7, i64 1848, !7, i64 1856, !7, i64 1864, !10, i64 1872, !7, i64 1880, !7, i64 1888, !7, i64 1896, !7, i64 1904, !11, i64 1912, !8, i64 1916, !8, i64 1928, !8, i64 2128, !8, i64 2168, !8, i64 2368, !10, i64 2408, !10, i64 2416, !10, i64 2424, !10, i64 2432, !11, i64 2440, !11, i64 2444, !11, i64 2448, !10, i64 2456, !10, i64 2464, !10, i64 2472, !10, i64 2480, !10, i64 2488, !11, i64 2496, !11, i64 2500, !10, i64 2504, !11, i64 2512, !10, i64 2520, !11, i64 2528, !10, i64 2536, !10, i64 2544, !10, i64 2552, !10, i64 2560, !11, i64 2568, !11, i64 2572, !11, i64 2576, !11, i64 2580, !11, i64 2584, !11, i64 2588, !11, i64 2592, !11, i64 2596, !14, i64 2600, !11, i64 2608, !11, i64 2612, !11, i64 2616, !11, i64 2620, !11, i64 2624, !10, i64 2632, !10, i64 2640, !11, i64 2648, !11, i64 2652, !11, i64 2656, !7, i64 2664, !11, i64 2672, !7, i64 2680, !7, i64 2688, !7, i64 2696, !11, i64 2704, !11, i64 2708, !11, i64 2712, !11, i64 2716, !11, i64 2720, !7, i64 2728, !7, i64 2736, !11, i64 2744, !11, i64 2748, !11, i64 2752, !11, i64 2756, !11, i64 2760, !11, i64 2764, !7, i64 2768, !7, i64 2776, !11, i64 2784, !11, i64 2788, !11, i64 2792, !11, i64 2796, !10, i64 2800, !10, i64 2808, !10, i64 2816, !10, i64 2824, !10, i64 2832, !10, i64 2840, !10, i64 2848, !10, i64 2856, !10, i64 2864, !11, i64 2872, !10, i64 2880, !10, i64 2888, !11, i64 2896, !11, i64 2900, !11, i64 2904, !10, i64 2912, !7, i64 2920, !7, i64 2928, !7, i64 2936, !7, i64 2944, !11, i64 2952, !11, i64 2956, !11, i64 2960, !11, i64 2964, !11, i64 2968, !11, i64 2972, !10, i64 2976, !10, i64 2984, !11, i64 2992}
!14 = !{!"long", !8, i64 0}
!15 = !{!13, !7, i64 1784}
!16 = !{!13, !11, i64 180}
!17 = !{!13, !7, i64 1768}
!18 = !{!6, !10, i64 40}
!19 = !{!8, !8, i64 0}
!20 = !{!7, !7, i64 0}
!21 = !{!6, !10, i64 24}
!22 = !{!13, !11, i64 136}
!23 = !{!13, !10, i64 2424}
!24 = !{!6, !11, i64 108}
!25 = !{!13, !11, i64 2620}
!26 = !{!13, !7, i64 168}
!27 = !{!28, !11, i64 32}
!28 = !{!"vertexT", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 40, !11, i64 40, !11, i64 40, !11, i64 40, !11, i64 40}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass