; LLVM IR from ImperialCollegeLondon/pnflow :: src/pnm/pnextract/medialSurf.ll (ZN13medialSurface31paradox_pre_removeincludedballIEv)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.medialSurface = type <{ ptr, i32, i32, i32, [4 x i8], i64, i64, ptr, %class.segment, %"class.std::vector", %"class.std::vector.0", %class.medialBall, float, [4 x i8], double, double, double, double, double, double, i32, [4 x i8], double, float, [4 x i8] }>
%class.segment = type { i32, i8, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<voxel, std::allocator<voxel>>::_Vector_impl" }
%"struct.std::_Vector_base<voxel, std::allocator<voxel>>::_Vector_impl" = type { %"struct.std::_Vector_base<voxel, std::allocator<voxel>>::_Vector_impl_data" }
%"struct.std::_Vector_base<voxel, std::allocator<voxel>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<medialBall, std::allocator<medialBall>>::_Vector_impl" }
%"struct.std::_Vector_base<medialBall, std::allocator<medialBall>>::_Vector_impl" = type { %"struct.std::_Vector_base<medialBall, std::allocator<medialBall>>::_Vector_impl_data" }
%"struct.std::_Vector_base<medialBall, std::allocator<medialBall>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.medialBall = type { ptr, float, float, float, i16, float, i16, i16, i16, i16, i16, ptr, ptr, ptr }
%class.segments = type <{ ptr, i32, [4 x i8] }>
%class.voxel = type <{ ptr, i16, i16, i16, [2 x i8], float, [4 x i8] }>

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.46 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [13 x i8], align 1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I8segmentsSaIS0_EESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNSt6vectorI8segmentsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorI5voxelSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13medialSurface31paradox_pre_removeincludedballIEv(ptr noundef nonnull align 8 dereferenceable(252) %0) #3 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca [8 x ptr], align 16
  %11 = alloca i32, align 4
  %12 = alloca float, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %18 = load ptr, ptr %2, align 8
  %19 = getelementptr inbounds %class.medialSurface, ptr %18, i32 0, i32 5
  %20 = load i64, ptr %19, align 8, !tbaa !9
  %21 = icmp ne i64 %20, 0
  br i1 %21, label %23, label %22

22:                                               ; preds = %1
  br label %218

23:                                               ; preds = %1
  %24 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.46)
  %25 = getelementptr inbounds %class.medialSurface, ptr %18, i32 0, i32 9
  %26 = call noundef i64 @_ZNKSt6vectorI5voxelSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %25) #6
  %27 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %24, i64 noundef %26)
  %28 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  store i32 0, ptr %3, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  store i32 0, ptr %4, align 4, !tbaa !26
  br label %29

29:                                               ; preds = %201, %23
  %30 = load i32, ptr %4, align 4, !tbaa !26
  %31 = getelementptr inbounds %class.medialSurface, ptr %18, i32 0, i32 3
  %32 = load i32, ptr %31, align 8, !tbaa !27
  %33 = icmp slt i32 %30, %32
  br i1 %33, label %35, label %34

34:                                               ; preds = %29
  store i32 2, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  br label %204

35:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  store i32 0, ptr %6, align 4, !tbaa !26
  br label %36

36:                                               ; preds = %197, %35
  %37 = load i32, ptr %6, align 4, !tbaa !26
  %38 = getelementptr inbounds %class.medialSurface, ptr %18, i32 0, i32 2
  %39 = load i32, ptr %38, align 4, !tbaa !28
  %40 = icmp slt i32 %37, %39
  br i1 %40, label %42, label %41

41:                                               ; preds = %36
  store i32 5, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  br label %200

42:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %43 = getelementptr inbounds %class.medialSurface, ptr %18, i32 0, i32 7
  %44 = load ptr, ptr %43, align 8, !tbaa !29
  %45 = load i32, ptr %4, align 4, !tbaa !26
  %46 = sext i32 %45 to i64
  %47 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I8segmentsSaIS0_EESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %44, i64 noundef %46) #6
  %48 = load i32, ptr %6, align 4, !tbaa !26
  %49 = sext i32 %48 to i64
  %50 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNSt6vectorI8segmentsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %47, i64 noundef %49) #6
  store ptr %50, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 0, ptr %8, align 4, !tbaa !26
  br label %51

51:                                               ; preds = %193, %42
  %52 = load i32, ptr %8, align 4, !tbaa !26
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = getelementptr inbounds %class.segments, ptr %53, i32 0, i32 1
  %55 = load i32, ptr %54, align 8, !tbaa !30
  %56 = icmp slt i32 %52, %55
  br i1 %56, label %58, label %57

57:                                               ; preds = %51
  store i32 8, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %196

58:                                               ; preds = %51
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %class.segments, ptr %59, i32 0, i32 0
  %61 = load ptr, ptr %60, align 8, !tbaa !32
  %62 = load i32, ptr %8, align 4, !tbaa !26
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds %class.segment, ptr %61, i64 %63
  %65 = getelementptr inbounds %class.segment, ptr %64, i32 0, i32 1
  %66 = load i8, ptr %65, align 4, !tbaa !33
  %67 = zext i8 %66 to i32
  %68 = icmp eq i32 %67, 0
  br i1 %68, label %69, label %192

69:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds %class.segments, ptr %70, i32 0, i32 0
  %72 = load ptr, ptr %71, align 8, !tbaa !32
  %73 = load i32, ptr %8, align 4, !tbaa !26
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds %class.segment, ptr %72, i64 %74
  %76 = getelementptr inbounds %class.segment, ptr %75, i32 0, i32 0
  %77 = load i32, ptr %76, align 8, !tbaa !34
  store i32 %77, ptr %9, align 4, !tbaa !26
  br label %78

78:                                               ; preds = %188, %69
  %79 = load i32, ptr %9, align 4, !tbaa !26
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds %class.segments, ptr %80, i32 0, i32 0
  %82 = load ptr, ptr %81, align 8, !tbaa !32
  %83 = load i32, ptr %8, align 4, !tbaa !26
  %84 = add nsw i32 %83, 1
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds %class.segment, ptr %82, i64 %85
  %87 = getelementptr inbounds %class.segment, ptr %86, i32 0, i32 0
  %88 = load i32, ptr %87, align 8, !tbaa !34
  %89 = icmp slt i32 %79, %88
  br i1 %89, label %91, label %90

90:                                               ; preds = %78
  store i32 11, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  br label %191

91:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 64, ptr %10) #6
  call void @llvm.memset.p0.i64(ptr align 16 %10, i8 0, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 -1, ptr %11, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store float 0.000000e+00, ptr %12, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !26
  br label %92

92:                                               ; preds = %161, %91
  %93 = load i32, ptr %14, align 4, !tbaa !26
  %94 = icmp slt i32 %93, 2
  br i1 %94, label %96, label %95

95:                                               ; preds = %92
  store i32 14, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %164

96:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  store i32 0, ptr %15, align 4, !tbaa !26
  br label %97

97:                                               ; preds = %157, %96
  %98 = load i32, ptr %15, align 4, !tbaa !26
  %99 = icmp slt i32 %98, 2
  br i1 %99, label %101, label %100

100:                                              ; preds = %97
  store i32 17, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %160

101:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 0, ptr %16, align 4, !tbaa !26
  br label %102

102:                                              ; preds = %153, %101
  %103 = load i32, ptr %16, align 4, !tbaa !26
  %104 = icmp slt i32 %103, 2
  br i1 %104, label %106, label %105

105:                                              ; preds = %102
  store i32 20, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %156

106:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %107 = load i32, ptr %9, align 4, !tbaa !26
  %108 = load i32, ptr %16, align 4, !tbaa !26
  %109 = add nsw i32 %107, %108
  %110 = load i32, ptr %6, align 4, !tbaa !26
  %111 = load i32, ptr %15, align 4, !tbaa !26
  %112 = add nsw i32 %110, %111
  %113 = load i32, ptr %4, align 4, !tbaa !26
  %114 = load i32, ptr %14, align 4, !tbaa !26
  %115 = add nsw i32 %113, %114
  %116 = call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %18, i32 noundef %109, i32 noundef %112, i32 noundef %115)
  store ptr %116, ptr %17, align 8, !tbaa !5
  %117 = load ptr, ptr %17, align 8, !tbaa !5
  %118 = icmp ne ptr %117, null
  br i1 %118, label %119, label %152

119:                                              ; preds = %106
  %120 = load ptr, ptr %17, align 8, !tbaa !5
  %121 = getelementptr inbounds %class.voxel, ptr %120, i32 0, i32 0
  %122 = load ptr, ptr %121, align 8, !tbaa !36
  %123 = getelementptr inbounds %class.medialSurface, ptr %18, i32 0, i32 11
  %124 = icmp eq ptr %122, %123
  br i1 %124, label %125, label %152

125:                                              ; preds = %119
  %126 = load ptr, ptr %17, align 8, !tbaa !5
  %127 = getelementptr inbounds %class.voxel, ptr %126, i32 0, i32 5
  %128 = load float, ptr %127, align 8, !tbaa !38
  %129 = load float, ptr %12, align 4, !tbaa !35
  %130 = fcmp ogt float %128, %129
  br i1 %130, label %131, label %145

131:                                              ; preds = %125
  %132 = load ptr, ptr %13, align 8, !tbaa !5
  %133 = icmp ne ptr %132, null
  br i1 %133, label %134, label %140

134:                                              ; preds = %131
  %135 = load ptr, ptr %13, align 8, !tbaa !5
  %136 = load i32, ptr %11, align 4, !tbaa !26
  %137 = add nsw i32 %136, 1
  store i32 %137, ptr %11, align 4, !tbaa !26
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds [8 x ptr], ptr %10, i64 0, i64 %138
  store ptr %135, ptr %139, align 8, !tbaa !5
  br label %140

140:                                              ; preds = %134, %131
  %141 = load ptr, ptr %17, align 8, !tbaa !5
  %142 = getelementptr inbounds %class.voxel, ptr %141, i32 0, i32 5
  %143 = load float, ptr %142, align 8, !tbaa !38
  store float %143, ptr %12, align 4, !tbaa !35
  %144 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %144, ptr %13, align 8, !tbaa !5
  br label %151

145:                                              ; preds = %125
  %146 = load ptr, ptr %17, align 8, !tbaa !5
  %147 = load i32, ptr %11, align 4, !tbaa !26
  %148 = add nsw i32 %147, 1
  store i32 %148, ptr %11, align 4, !tbaa !26
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds [8 x ptr], ptr %10, i64 0, i64 %149
  store ptr %146, ptr %150, align 8, !tbaa !5
  br label %151

151:                                              ; preds = %145, %140
  br label %152

152:                                              ; preds = %151, %119, %106
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %153

153:                                              ; preds = %152
  %154 = load i32, ptr %16, align 4, !tbaa !26
  %155 = add nsw i32 %154, 1
  store i32 %155, ptr %16, align 4, !tbaa !26
  br label %102, !llvm.loop !39

156:                                              ; preds = %105
  br label %157

157:                                              ; preds = %156
  %158 = load i32, ptr %15, align 4, !tbaa !26
  %159 = add nsw i32 %158, 1
  store i32 %159, ptr %15, align 4, !tbaa !26
  br label %97, !llvm.loop !41

160:                                              ; preds = %100
  br label %161

161:                                              ; preds = %160
  %162 = load i32, ptr %14, align 4, !tbaa !26
  %163 = add nsw i32 %162, 1
  store i32 %163, ptr %14, align 4, !tbaa !26
  br label %92, !llvm.loop !42

164:                                              ; preds = %95
  %165 = load i32, ptr %11, align 4, !tbaa !26
  %166 = add nsw i32 %165, 1
  store i32 %166, ptr %11, align 4, !tbaa !26
  %167 = load i32, ptr %11, align 4, !tbaa !26
  %168 = load i32, ptr %3, align 4, !tbaa !26
  %169 = add nsw i32 %168, %167
  store i32 %169, ptr %3, align 4, !tbaa !26
  br label %170

170:                                              ; preds = %186, %164
  %171 = load i32, ptr %11, align 4, !tbaa !26
  %172 = icmp sgt i32 %171, 0
  br i1 %172, label %173, label %187

173:                                              ; preds = %170
  %174 = load i32, ptr %11, align 4, !tbaa !26
  %175 = add nsw i32 %174, -1
  store i32 %175, ptr %11, align 4, !tbaa !26
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds [8 x ptr], ptr %10, i64 0, i64 %176
  %178 = load ptr, ptr %177, align 8, !tbaa !5
  %179 = icmp ne ptr %178, null
  br i1 %179, label %180, label %186

180:                                              ; preds = %173
  %181 = load i32, ptr %11, align 4, !tbaa !26
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds [8 x ptr], ptr %10, i64 0, i64 %182
  %184 = load ptr, ptr %183, align 8, !tbaa !5
  %185 = getelementptr inbounds %class.voxel, ptr %184, i32 0, i32 0
  store ptr null, ptr %185, align 8, !tbaa !36
  br label %186

186:                                              ; preds = %180, %173
  br label %170, !llvm.loop !43

187:                                              ; preds = %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr %10) #6
  br label %188

188:                                              ; preds = %187
  %189 = load i32, ptr %9, align 4, !tbaa !26
  %190 = add nsw i32 %189, 2
  store i32 %190, ptr %9, align 4, !tbaa !26
  br label %78, !llvm.loop !44

191:                                              ; preds = %90
  br label %192

192:                                              ; preds = %191, %58
  br label %193

193:                                              ; preds = %192
  %194 = load i32, ptr %8, align 4, !tbaa !26
  %195 = add nsw i32 %194, 1
  store i32 %195, ptr %8, align 4, !tbaa !26
  br label %51, !llvm.loop !45

196:                                              ; preds = %57
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  br label %197

197:                                              ; preds = %196
  %198 = load i32, ptr %6, align 4, !tbaa !26
  %199 = add nsw i32 %198, 2
  store i32 %199, ptr %6, align 4, !tbaa !26
  br label %36, !llvm.loop !46

200:                                              ; preds = %41
  br label %201

201:                                              ; preds = %200
  %202 = load i32, ptr %4, align 4, !tbaa !26
  %203 = add nsw i32 %202, 2
  store i32 %203, ptr %4, align 4, !tbaa !26
  br label %29, !llvm.loop !47

204:                                              ; preds = %34
  %205 = load i32, ptr %3, align 4, !tbaa !26
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds %class.medialSurface, ptr %18, i32 0, i32 6
  %208 = load i64, ptr %207, align 8, !tbaa !48
  %209 = sub i64 %208, %206
  store i64 %209, ptr %207, align 8, !tbaa !48
  %210 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.47)
  %211 = load i32, ptr %3, align 4, !tbaa !26
  %212 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %210, i32 noundef %211)
  %213 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %212, ptr noundef @.str.48)
  %214 = getelementptr inbounds %class.medialSurface, ptr %18, i32 0, i32 6
  %215 = load i64, ptr %214, align 8, !tbaa !48
  %216 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %213, i64 noundef %215)
  %217 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %216, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  br label %218

218:                                              ; preds = %204, %22
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252), i32 noundef, i32 noundef, i32 noundef) #4 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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++ TBAA"}
!9 = !{!10, !12, i64 24}
!10 = !{!"_ZTS13medialSurface", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !12, i64 24, !12, i64 32, !6, i64 40, !13, i64 48, !14, i64 64, !18, i64 88, !22, i64 112, !23, i64 176, !25, i64 184, !25, i64 192, !25, i64 200, !25, i64 208, !25, i64 216, !25, i64 224, !11, i64 232, !25, i64 240, !23, i64 248}
!11 = !{!"int", !7, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!"_ZTS7segment", !11, i64 0, !7, i64 4, !6, i64 8}
!14 = !{!"_ZTSSt6vectorI5voxelSaIS0_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseI5voxelSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseI5voxelSaIS0_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI5voxelSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!"_ZTSSt6vectorI10medialBallSaIS0_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseI10medialBallSaIS0_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseI10medialBallSaIS0_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseI10medialBallSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!"_ZTS10medialBall", !6, i64 0, !23, i64 8, !23, i64 12, !23, i64 16, !24, i64 20, !23, i64 24, !24, i64 28, !24, i64 30, !24, i64 32, !24, i64 34, !24, i64 36, !6, i64 40, !6, i64 48, !6, i64 56}
!23 = !{!"float", !7, i64 0}
!24 = !{!"short", !7, i64 0}
!25 = !{!"double", !7, i64 0}
!26 = !{!11, !11, i64 0}
!27 = !{!10, !11, i64 16}
!28 = !{!10, !11, i64 12}
!29 = !{!10, !6, i64 40}
!30 = !{!31, !11, i64 8}
!31 = !{!"_ZTS8segments", !6, i64 0, !11, i64 8}
!32 = !{!31, !6, i64 0}
!33 = !{!13, !7, i64 4}
!34 = !{!13, !11, i64 0}
!35 = !{!23, !23, i64 0}
!36 = !{!37, !6, i64 0}
!37 = !{!"_ZTS5voxel", !6, i64 0, !24, i64 8, !24, i64 10, !24, i64 12, !23, i64 16}
!38 = !{!37, !23, i64 16}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = distinct !{!41, !40}
!42 = distinct !{!42, !40}
!43 = distinct !{!43, !40}
!44 = distinct !{!44, !40}
!45 = distinct !{!45, !40}
!46 = distinct !{!46, !40}
!47 = distinct !{!47, !40}
!48 = !{!10, !12, i64 32}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.segment = type { i32, i8, ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.46 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [13 x i8], align 1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #1

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I8segmentsSaIS0_EESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNSt6vectorI8segmentsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #4 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorI5voxelSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13medialSurface31paradox_pre_removeincludedballIEv(ptr noundef nonnull align 8 dereferenceable(252) %0) local_unnamed_addr #3 align 2 {
  %2 = alloca [8 x ptr], align 16
  %3 = getelementptr inbounds i8, ptr %0, i64 24
  %4 = load i64, ptr %3, align 8, !tbaa !5
  %.not = icmp eq i64 %4, 0
  br i1 %.not, label %222, label %5

5:                                                ; preds = %1
  %6 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.46)
  %7 = getelementptr inbounds i8, ptr %0, i64 64
  %8 = tail call noundef i64 @_ZNKSt6vectorI5voxelSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  %9 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %8)
  %10 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout)
  %11 = getelementptr inbounds i8, ptr %0, i64 16
  %12 = load i32, ptr %11, align 8, !tbaa !25
  %13 = icmp sgt i32 %12, 0
  br i1 %13, label %.preheader74.lr.ph, label %._crit_edge105

.preheader74.lr.ph:                               ; preds = %5
  %14 = getelementptr inbounds i8, ptr %0, i64 12
  %15 = getelementptr inbounds i8, ptr %0, i64 40
  %16 = getelementptr inbounds i8, ptr %0, i64 112
  %17 = load i32, ptr %14, align 4, !tbaa !26
  %18 = icmp sgt i32 %17, 0
  br i1 %18, label %.preheader74, label %._crit_edge105

.preheader74:                                     ; preds = %.preheader74.lr.ph, %._crit_edge101
  %19 = phi i32 [ %35, %._crit_edge101 ], [ %12, %.preheader74.lr.ph ]
  %20 = phi i32 [ %36, %._crit_edge101 ], [ %17, %.preheader74.lr.ph ]
  %indvars.iv131 = phi i64 [ %indvars.iv.next132, %._crit_edge101 ], [ 0, %.preheader74.lr.ph ]
  %.0104 = phi i32 [ %.1.lcssa, %._crit_edge101 ], [ 0, %.preheader74.lr.ph ]
  %21 = icmp sgt i32 %20, 0
  br i1 %21, label %.lr.ph100, label %._crit_edge101

.lr.ph100:                                        ; preds = %.preheader74
  %22 = trunc nuw nsw i64 %indvars.iv131 to i32
  %23 = trunc i64 %indvars.iv131 to i32
  %24 = or disjoint i32 %23, 1
  br label %39

._crit_edge105:                                   ; preds = %._crit_edge101, %.preheader74.lr.ph, %5
  %.0.lcssa = phi i32 [ 0, %5 ], [ 0, %.preheader74.lr.ph ], [ %.1.lcssa, %._crit_edge101 ]
  %25 = sext i32 %.0.lcssa to i64
  %26 = getelementptr inbounds i8, ptr %0, i64 32
  %27 = load i64, ptr %26, align 8, !tbaa !27
  %28 = sub i64 %27, %25
  store i64 %28, ptr %26, align 8, !tbaa !27
  %29 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.47)
  %30 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef %.0.lcssa)
  %31 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull @.str.48)
  %32 = load i64, ptr %26, align 8, !tbaa !27
  %33 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %31, i64 noundef %32)
  %34 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %222

._crit_edge101.loopexit:                          ; preds = %._crit_edge96
  %.pre135 = load i32, ptr %11, align 8, !tbaa !25
  br label %._crit_edge101

._crit_edge101:                                   ; preds = %._crit_edge101.loopexit, %.preheader74
  %35 = phi i32 [ %19, %.preheader74 ], [ %.pre135, %._crit_edge101.loopexit ]
  %36 = phi i32 [ %20, %.preheader74 ], [ %49, %._crit_edge101.loopexit ]
  %.1.lcssa = phi i32 [ %.0104, %.preheader74 ], [ %.2.lcssa, %._crit_edge101.loopexit ]
  %indvars.iv.next132 = add nuw nsw i64 %indvars.iv131, 2
  %37 = trunc nuw i64 %indvars.iv.next132 to i32
  %38 = icmp sgt i32 %35, %37
  br i1 %38, label %.preheader74, label %._crit_edge105, !llvm.loop !28

39:                                               ; preds = %.lr.ph100, %._crit_edge96
  %indvars.iv128 = phi i64 [ 0, %.lr.ph100 ], [ %indvars.iv.next129, %._crit_edge96 ]
  %.199 = phi i32 [ %.0104, %.lr.ph100 ], [ %.2.lcssa, %._crit_edge96 ]
  %40 = load ptr, ptr %15, align 8, !tbaa !31
  %41 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I8segmentsSaIS0_EESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %40, i64 noundef %indvars.iv131) #6
  %42 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNSt6vectorI8segmentsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %indvars.iv128) #6
  %43 = getelementptr inbounds i8, ptr %42, i64 8
  %44 = load i32, ptr %43, align 8, !tbaa !32
  %45 = icmp sgt i32 %44, 0
  br i1 %45, label %.lr.ph95.preheader, label %._crit_edge96

.lr.ph95.preheader:                               ; preds = %39
  %.pre = load ptr, ptr %42, align 8, !tbaa !34
  %46 = trunc nuw nsw i64 %indvars.iv128 to i32
  %47 = trunc i64 %indvars.iv128 to i32
  %48 = or disjoint i32 %47, 1
  br label %.lr.ph95

._crit_edge96:                                    ; preds = %.loopexit, %39
  %.2.lcssa = phi i32 [ %.199, %39 ], [ %.4, %.loopexit ]
  %indvars.iv.next129 = add nuw nsw i64 %indvars.iv128, 2
  %49 = load i32, ptr %14, align 4, !tbaa !26
  %50 = trunc nuw i64 %indvars.iv.next129 to i32
  %51 = icmp sgt i32 %49, %50
  br i1 %51, label %39, label %._crit_edge101.loopexit, !llvm.loop !35

.lr.ph95:                                         ; preds = %.lr.ph95.preheader, %.loopexit
  %52 = phi i32 [ %44, %.lr.ph95.preheader ], [ %217, %.loopexit ]
  %53 = phi ptr [ %.pre, %.lr.ph95.preheader ], [ %218, %.loopexit ]
  %54 = phi ptr [ %.pre, %.lr.ph95.preheader ], [ %219, %.loopexit ]
  %indvars.iv125 = phi i64 [ 0, %.lr.ph95.preheader ], [ %indvars.iv.next126, %.loopexit ]
  %.293 = phi i32 [ %.199, %.lr.ph95.preheader ], [ %.4, %.loopexit ]
  %55 = getelementptr inbounds %class.segment, ptr %54, i64 %indvars.iv125
  %56 = getelementptr inbounds i8, ptr %55, i64 4
  %57 = load i8, ptr %56, align 4, !tbaa !36
  %58 = icmp eq i8 %57, 0
  br i1 %58, label %59, label %.loopexit

59:                                               ; preds = %.lr.ph95
  %60 = load i32, ptr %55, align 8, !tbaa !37
  %61 = getelementptr inbounds %class.segment, ptr %53, i64 %indvars.iv125
  %62 = getelementptr inbounds i8, ptr %61, i64 16
  %63 = load i32, ptr %62, align 8, !tbaa !37
  %64 = icmp slt i32 %60, %63
  br i1 %64, label %.lr.ph91, label %.loopexit

.lr.ph91:                                         ; preds = %59, %._crit_edge
  %.389 = phi i32 [ %210, %._crit_edge ], [ %.293, %59 ]
  %.06488 = phi i32 [ %211, %._crit_edge ], [ %60, %59 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %2) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %2, i8 0, i64 64, i1 false)
  %65 = tail call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %0, i32 noundef %.06488, i32 noundef %46, i32 noundef %22)
  %.not71 = icmp eq ptr %65, null
  br i1 %.not71, label %79, label %71

.lr.ph.preheader:                                 ; preds = %.thread, %170
  %66 = phi i32 [ %169, %.thread ], [ %172, %170 ]
  %67 = phi i32 [ %168, %.thread ], [ %171, %170 ]
  %68 = zext nneg i32 %67 to i64
  %indvars.iv.next = add nsw i64 %68, -1
  %69 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %indvars.iv.next
  %70 = load ptr, ptr %69, align 8, !tbaa !38
  %.not70 = icmp eq ptr %70, null
  br i1 %.not70, label %175, label %174

71:                                               ; preds = %.lr.ph91
  %72 = load ptr, ptr %65, align 8, !tbaa !39
  %73 = icmp eq ptr %72, %16
  br i1 %73, label %74, label %79

74:                                               ; preds = %71
  %75 = getelementptr inbounds i8, ptr %65, i64 16
  %76 = load float, ptr %75, align 8, !tbaa !41
  %77 = fcmp ogt float %76, 0.000000e+00
  br i1 %77, label %79, label %78

78:                                               ; preds = %74
  store ptr %65, ptr %2, align 16, !tbaa !38
  br label %79

79:                                               ; preds = %74, %78, %71, %.lr.ph91
  %.463 = phi i32 [ 0, %78 ], [ -1, %71 ], [ -1, %.lr.ph91 ], [ -1, %74 ]
  %.358 = phi float [ 0.000000e+00, %78 ], [ 0.000000e+00, %71 ], [ 0.000000e+00, %.lr.ph91 ], [ %76, %74 ]
  %.354 = phi ptr [ null, %78 ], [ null, %71 ], [ null, %.lr.ph91 ], [ %65, %74 ]
  %80 = add nsw i32 %.06488, 1
  %81 = tail call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %0, i32 noundef %80, i32 noundef %46, i32 noundef %22)
  %.not71.1 = icmp eq ptr %81, null
  br i1 %.not71.1, label %.preheader.1, label %82

82:                                               ; preds = %79
  %83 = load ptr, ptr %81, align 8, !tbaa !39
  %84 = icmp eq ptr %83, %16
  br i1 %84, label %85, label %.preheader.1

85:                                               ; preds = %82
  %86 = getelementptr inbounds i8, ptr %81, i64 16
  %87 = load float, ptr %86, align 8, !tbaa !41
  %88 = fcmp ogt float %87, %.358
  br i1 %88, label %89, label %.preheader.1.sink.split

89:                                               ; preds = %85
  %.not72.1 = icmp eq ptr %.354, null
  br i1 %.not72.1, label %.preheader.1, label %.preheader.1.sink.split

.preheader.1.sink.split:                          ; preds = %89, %85
  %.354.sink = phi ptr [ %81, %85 ], [ %.354, %89 ]
  %.358.1.ph = phi float [ %.358, %85 ], [ %87, %89 ]
  %.354.1.ph = phi ptr [ %.354, %85 ], [ %81, %89 ]
  %90 = add nsw i32 %.463, 1
  %91 = zext nneg i32 %90 to i64
  %92 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %91
  store ptr %.354.sink, ptr %92, align 8, !tbaa !38
  br label %.preheader.1

.preheader.1:                                     ; preds = %.preheader.1.sink.split, %89, %82, %79
  %.463.1 = phi i32 [ %.463, %82 ], [ %.463, %79 ], [ %.463, %89 ], [ %90, %.preheader.1.sink.split ]
  %.358.1 = phi float [ %.358, %82 ], [ %.358, %79 ], [ %87, %89 ], [ %.358.1.ph, %.preheader.1.sink.split ]
  %.354.1 = phi ptr [ %.354, %82 ], [ %.354, %79 ], [ %81, %89 ], [ %.354.1.ph, %.preheader.1.sink.split ]
  %93 = tail call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %0, i32 noundef %.06488, i32 noundef %48, i32 noundef %22)
  %.not71.1108 = icmp eq ptr %93, null
  br i1 %.not71.1108, label %105, label %94

94:                                               ; preds = %.preheader.1
  %95 = load ptr, ptr %93, align 8, !tbaa !39
  %96 = icmp eq ptr %95, %16
  br i1 %96, label %97, label %105

97:                                               ; preds = %94
  %98 = getelementptr inbounds i8, ptr %93, i64 16
  %99 = load float, ptr %98, align 8, !tbaa !41
  %100 = fcmp ogt float %99, %.358.1
  br i1 %100, label %101, label %.sink.split

101:                                              ; preds = %97
  %.not72.1109 = icmp eq ptr %.354.1, null
  br i1 %.not72.1109, label %105, label %.sink.split

.sink.split:                                      ; preds = %101, %97
  %.354.1.sink = phi ptr [ %93, %97 ], [ %.354.1, %101 ]
  %.358.1111.ph = phi float [ %.358.1, %97 ], [ %99, %101 ]
  %.354.1112.ph = phi ptr [ %.354.1, %97 ], [ %93, %101 ]
  %102 = add nsw i32 %.463.1, 1
  %103 = zext nneg i32 %102 to i64
  %104 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %103
  store ptr %.354.1.sink, ptr %104, align 8, !tbaa !38
  br label %105

105:                                              ; preds = %.sink.split, %101, %94, %.preheader.1
  %.463.1110 = phi i32 [ %.463.1, %94 ], [ %.463.1, %.preheader.1 ], [ %.463.1, %101 ], [ %102, %.sink.split ]
  %.358.1111 = phi float [ %.358.1, %94 ], [ %.358.1, %.preheader.1 ], [ %99, %101 ], [ %.358.1111.ph, %.sink.split ]
  %.354.1112 = phi ptr [ %.354.1, %94 ], [ %.354.1, %.preheader.1 ], [ %93, %101 ], [ %.354.1112.ph, %.sink.split ]
  %106 = tail call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %0, i32 noundef %80, i32 noundef %48, i32 noundef %22)
  %.not71.1.1 = icmp eq ptr %106, null
  br i1 %.not71.1.1, label %.preheader73.1, label %107

107:                                              ; preds = %105
  %108 = load ptr, ptr %106, align 8, !tbaa !39
  %109 = icmp eq ptr %108, %16
  br i1 %109, label %110, label %.preheader73.1

110:                                              ; preds = %107
  %111 = getelementptr inbounds i8, ptr %106, i64 16
  %112 = load float, ptr %111, align 8, !tbaa !41
  %113 = fcmp ogt float %112, %.358.1111
  br i1 %113, label %114, label %.preheader73.1.sink.split

114:                                              ; preds = %110
  %.not72.1.1 = icmp eq ptr %.354.1112, null
  br i1 %.not72.1.1, label %.preheader73.1, label %.preheader73.1.sink.split

.preheader73.1.sink.split:                        ; preds = %114, %110
  %.354.1112.sink = phi ptr [ %106, %110 ], [ %.354.1112, %114 ]
  %.358.1.1.ph = phi float [ %.358.1111, %110 ], [ %112, %114 ]
  %.354.1.1.ph = phi ptr [ %.354.1112, %110 ], [ %106, %114 ]
  %115 = add nsw i32 %.463.1110, 1
  %116 = zext nneg i32 %115 to i64
  %117 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %116
  store ptr %.354.1112.sink, ptr %117, align 8, !tbaa !38
  br label %.preheader73.1

.preheader73.1:                                   ; preds = %.preheader73.1.sink.split, %114, %107, %105
  %.463.1.1 = phi i32 [ %.463.1110, %107 ], [ %.463.1110, %105 ], [ %.463.1110, %114 ], [ %115, %.preheader73.1.sink.split ]
  %.358.1.1 = phi float [ %.358.1111, %107 ], [ %.358.1111, %105 ], [ %112, %114 ], [ %.358.1.1.ph, %.preheader73.1.sink.split ]
  %.354.1.1 = phi ptr [ %.354.1112, %107 ], [ %.354.1112, %105 ], [ %106, %114 ], [ %.354.1.1.ph, %.preheader73.1.sink.split ]
  %118 = tail call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %0, i32 noundef %.06488, i32 noundef %46, i32 noundef %24)
  %.not71.1114 = icmp eq ptr %118, null
  br i1 %.not71.1114, label %130, label %119

119:                                              ; preds = %.preheader73.1
  %120 = load ptr, ptr %118, align 8, !tbaa !39
  %121 = icmp eq ptr %120, %16
  br i1 %121, label %122, label %130

122:                                              ; preds = %119
  %123 = getelementptr inbounds i8, ptr %118, i64 16
  %124 = load float, ptr %123, align 8, !tbaa !41
  %125 = fcmp ogt float %124, %.358.1.1
  br i1 %125, label %126, label %.sink.split142

126:                                              ; preds = %122
  %.not72.1115 = icmp eq ptr %.354.1.1, null
  br i1 %.not72.1115, label %130, label %.sink.split142

.sink.split142:                                   ; preds = %126, %122
  %.354.1.1.sink = phi ptr [ %118, %122 ], [ %.354.1.1, %126 ]
  %.358.1117.ph = phi float [ %.358.1.1, %122 ], [ %124, %126 ]
  %.354.1118.ph = phi ptr [ %.354.1.1, %122 ], [ %118, %126 ]
  %127 = add nsw i32 %.463.1.1, 1
  %128 = zext nneg i32 %127 to i64
  %129 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %128
  store ptr %.354.1.1.sink, ptr %129, align 8, !tbaa !38
  br label %130

130:                                              ; preds = %.sink.split142, %126, %119, %.preheader73.1
  %.463.1116 = phi i32 [ %.463.1.1, %119 ], [ %.463.1.1, %.preheader73.1 ], [ %.463.1.1, %126 ], [ %127, %.sink.split142 ]
  %.358.1117 = phi float [ %.358.1.1, %119 ], [ %.358.1.1, %.preheader73.1 ], [ %124, %126 ], [ %.358.1117.ph, %.sink.split142 ]
  %.354.1118 = phi ptr [ %.354.1.1, %119 ], [ %.354.1.1, %.preheader73.1 ], [ %118, %126 ], [ %.354.1118.ph, %.sink.split142 ]
  %131 = tail call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %0, i32 noundef %80, i32 noundef %46, i32 noundef %24)
  %.not71.1.1119 = icmp eq ptr %131, null
  br i1 %.not71.1.1119, label %.preheader.1.1, label %132

132:                                              ; preds = %130
  %133 = load ptr, ptr %131, align 8, !tbaa !39
  %134 = icmp eq ptr %133, %16
  br i1 %134, label %135, label %.preheader.1.1

135:                                              ; preds = %132
  %136 = getelementptr inbounds i8, ptr %131, i64 16
  %137 = load float, ptr %136, align 8, !tbaa !41
  %138 = fcmp ogt float %137, %.358.1117
  br i1 %138, label %139, label %.preheader.1.1.sink.split

139:                                              ; preds = %135
  %.not72.1.1120 = icmp eq ptr %.354.1118, null
  br i1 %.not72.1.1120, label %.preheader.1.1, label %.preheader.1.1.sink.split

.preheader.1.1.sink.split:                        ; preds = %139, %135
  %.354.1118.sink = phi ptr [ %131, %135 ], [ %.354.1118, %139 ]
  %.358.1.1122.ph = phi float [ %.358.1117, %135 ], [ %137, %139 ]
  %.354.1.1123.ph = phi ptr [ %.354.1118, %135 ], [ %131, %139 ]
  %140 = add nsw i32 %.463.1116, 1
  %141 = zext nneg i32 %140 to i64
  %142 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %141
  store ptr %.354.1118.sink, ptr %142, align 8, !tbaa !38
  br label %.preheader.1.1

.preheader.1.1:                                   ; preds = %.preheader.1.1.sink.split, %139, %132, %130
  %.463.1.1121 = phi i32 [ %.463.1116, %132 ], [ %.463.1116, %130 ], [ %.463.1116, %139 ], [ %140, %.preheader.1.1.sink.split ]
  %.358.1.1122 = phi float [ %.358.1117, %132 ], [ %.358.1117, %130 ], [ %137, %139 ], [ %.358.1.1122.ph, %.preheader.1.1.sink.split ]
  %.354.1.1123 = phi ptr [ %.354.1118, %132 ], [ %.354.1118, %130 ], [ %131, %139 ], [ %.354.1.1123.ph, %.preheader.1.1.sink.split ]
  %143 = tail call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %0, i32 noundef %.06488, i32 noundef %48, i32 noundef %24)
  %.not71.1108.1 = icmp eq ptr %143, null
  br i1 %.not71.1108.1, label %155, label %144

144:                                              ; preds = %.preheader.1.1
  %145 = load ptr, ptr %143, align 8, !tbaa !39
  %146 = icmp eq ptr %145, %16
  br i1 %146, label %147, label %155

147:                                              ; preds = %144
  %148 = getelementptr inbounds i8, ptr %143, i64 16
  %149 = load float, ptr %148, align 8, !tbaa !41
  %150 = fcmp ogt float %149, %.358.1.1122
  br i1 %150, label %151, label %.sink.split145

151:                                              ; preds = %147
  %.not72.1109.1 = icmp eq ptr %.354.1.1123, null
  br i1 %.not72.1109.1, label %155, label %.sink.split145

.sink.split145:                                   ; preds = %151, %147
  %.354.1.1123.sink = phi ptr [ %143, %147 ], [ %.354.1.1123, %151 ]
  %.358.1111.1.ph = phi float [ %.358.1.1122, %147 ], [ %149, %151 ]
  %.354.1112.1.ph = phi ptr [ %.354.1.1123, %147 ], [ %143, %151 ]
  %152 = add nsw i32 %.463.1.1121, 1
  %153 = zext nneg i32 %152 to i64
  %154 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %153
  store ptr %.354.1.1123.sink, ptr %154, align 8, !tbaa !38
  br label %155

155:                                              ; preds = %.sink.split145, %151, %144, %.preheader.1.1
  %.463.1110.1 = phi i32 [ %.463.1.1121, %144 ], [ %.463.1.1121, %.preheader.1.1 ], [ %.463.1.1121, %151 ], [ %152, %.sink.split145 ]
  %.358.1111.1 = phi float [ %.358.1.1122, %144 ], [ %.358.1.1122, %.preheader.1.1 ], [ %149, %151 ], [ %.358.1111.1.ph, %.sink.split145 ]
  %.354.1112.1 = phi ptr [ %.354.1.1123, %144 ], [ %.354.1.1123, %.preheader.1.1 ], [ %143, %151 ], [ %.354.1112.1.ph, %.sink.split145 ]
  %156 = tail call noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252) %0, i32 noundef %80, i32 noundef %48, i32 noundef %24)
  %.not71.1.1.1 = icmp eq ptr %156, null
  br i1 %.not71.1.1.1, label %170, label %157

157:                                              ; preds = %155
  %158 = load ptr, ptr %156, align 8, !tbaa !39
  %159 = icmp eq ptr %158, %16
  br i1 %159, label %160, label %170

160:                                              ; preds = %157
  %161 = getelementptr inbounds i8, ptr %156, i64 16
  %162 = load float, ptr %161, align 8, !tbaa !41
  %163 = fcmp ogt float %162, %.358.1111.1
  br i1 %163, label %164, label %.thread

164:                                              ; preds = %160
  %.not72.1.1.1 = icmp eq ptr %.354.1112.1, null
  br i1 %.not72.1.1.1, label %170, label %.thread

.thread:                                          ; preds = %164, %160
  %.sink = phi ptr [ %156, %160 ], [ %.354.1112.1, %164 ]
  %165 = add nsw i32 %.463.1110.1, 1
  %166 = zext nneg i32 %165 to i64
  %167 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %166
  store ptr %.sink, ptr %167, align 8, !tbaa !38
  %168 = add nsw i32 %.463.1110.1, 2
  %169 = add nsw i32 %168, %.389
  br label %.lr.ph.preheader

170:                                              ; preds = %164, %157, %155
  %171 = add nsw i32 %.463.1110.1, 1
  %172 = add nsw i32 %171, %.389
  %173 = icmp sgt i32 %.463.1110.1, -1
  br i1 %173, label %.lr.ph.preheader, label %._crit_edge

174:                                              ; preds = %.lr.ph.preheader
  store ptr null, ptr %70, align 8, !tbaa !39
  br label %175

175:                                              ; preds = %174, %.lr.ph.preheader
  %176 = icmp ugt i32 %67, 1
  br i1 %176, label %.lr.ph.1, label %._crit_edge, !llvm.loop !42

.lr.ph.1:                                         ; preds = %175
  %indvars.iv.next.1 = add nsw i64 %68, -2
  %177 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %indvars.iv.next.1
  %178 = load ptr, ptr %177, align 8, !tbaa !38
  %.not70.1 = icmp eq ptr %178, null
  br i1 %.not70.1, label %180, label %179

179:                                              ; preds = %.lr.ph.1
  store ptr null, ptr %178, align 8, !tbaa !39
  br label %180

180:                                              ; preds = %179, %.lr.ph.1
  %181 = icmp ugt i64 %indvars.iv.next, 1
  br i1 %181, label %.lr.ph.2, label %._crit_edge, !llvm.loop !42

.lr.ph.2:                                         ; preds = %180
  %indvars.iv.next.2 = add nsw i64 %68, -3
  %182 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %indvars.iv.next.2
  %183 = load ptr, ptr %182, align 8, !tbaa !38
  %.not70.2 = icmp eq ptr %183, null
  br i1 %.not70.2, label %185, label %184

184:                                              ; preds = %.lr.ph.2
  store ptr null, ptr %183, align 8, !tbaa !39
  br label %185

185:                                              ; preds = %184, %.lr.ph.2
  %186 = icmp ugt i64 %indvars.iv.next.1, 1
  br i1 %186, label %.lr.ph.3, label %._crit_edge, !llvm.loop !42

.lr.ph.3:                                         ; preds = %185
  %indvars.iv.next.3 = add nsw i64 %68, -4
  %187 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %indvars.iv.next.3
  %188 = load ptr, ptr %187, align 8, !tbaa !38
  %.not70.3 = icmp eq ptr %188, null
  br i1 %.not70.3, label %190, label %189

189:                                              ; preds = %.lr.ph.3
  store ptr null, ptr %188, align 8, !tbaa !39
  br label %190

190:                                              ; preds = %189, %.lr.ph.3
  %191 = icmp ugt i64 %indvars.iv.next.2, 1
  br i1 %191, label %.lr.ph.4, label %._crit_edge, !llvm.loop !42

.lr.ph.4:                                         ; preds = %190
  %indvars.iv.next.4 = add nsw i64 %68, -5
  %192 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %indvars.iv.next.4
  %193 = load ptr, ptr %192, align 8, !tbaa !38
  %.not70.4 = icmp eq ptr %193, null
  br i1 %.not70.4, label %195, label %194

194:                                              ; preds = %.lr.ph.4
  store ptr null, ptr %193, align 8, !tbaa !39
  br label %195

195:                                              ; preds = %194, %.lr.ph.4
  %196 = icmp ugt i64 %indvars.iv.next.3, 1
  br i1 %196, label %.lr.ph.5, label %._crit_edge, !llvm.loop !42

.lr.ph.5:                                         ; preds = %195
  %indvars.iv.next.5 = add nsw i64 %68, -6
  %197 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %indvars.iv.next.5
  %198 = load ptr, ptr %197, align 8, !tbaa !38
  %.not70.5 = icmp eq ptr %198, null
  br i1 %.not70.5, label %200, label %199

199:                                              ; preds = %.lr.ph.5
  store ptr null, ptr %198, align 8, !tbaa !39
  br label %200

200:                                              ; preds = %199, %.lr.ph.5
  %201 = icmp ugt i64 %indvars.iv.next.4, 1
  br i1 %201, label %.lr.ph.6, label %._crit_edge, !llvm.loop !42

.lr.ph.6:                                         ; preds = %200
  %indvars.iv.next.6 = add nsw i64 %68, -7
  %202 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %indvars.iv.next.6
  %203 = load ptr, ptr %202, align 8, !tbaa !38
  %.not70.6 = icmp eq ptr %203, null
  br i1 %.not70.6, label %205, label %204

204:                                              ; preds = %.lr.ph.6
  store ptr null, ptr %203, align 8, !tbaa !39
  br label %205

205:                                              ; preds = %204, %.lr.ph.6
  %206 = icmp ugt i64 %indvars.iv.next.5, 1
  br i1 %206, label %.lr.ph.7, label %._crit_edge, !llvm.loop !42

.lr.ph.7:                                         ; preds = %205
  %indvars.iv.next.7 = add nsw i64 %68, -8
  %207 = getelementptr inbounds [8 x ptr], ptr %2, i64 0, i64 %indvars.iv.next.7
  %208 = load ptr, ptr %207, align 8, !tbaa !38
  %.not70.7 = icmp eq ptr %208, null
  br i1 %.not70.7, label %._crit_edge, label %209

209:                                              ; preds = %.lr.ph.7
  store ptr null, ptr %208, align 8, !tbaa !39
  br label %._crit_edge

._crit_edge:                                      ; preds = %175, %180, %185, %190, %195, %200, %205, %209, %.lr.ph.7, %170
  %210 = phi i32 [ %172, %170 ], [ %66, %.lr.ph.7 ], [ %66, %209 ], [ %66, %205 ], [ %66, %200 ], [ %66, %195 ], [ %66, %190 ], [ %66, %185 ], [ %66, %180 ], [ %66, %175 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %2) #6
  %211 = add nsw i32 %.06488, 2
  %212 = load ptr, ptr %42, align 8, !tbaa !34
  %213 = getelementptr inbounds %class.segment, ptr %212, i64 %indvars.iv125
  %214 = getelementptr inbounds i8, ptr %213, i64 16
  %215 = load i32, ptr %214, align 8, !tbaa !37
  %216 = icmp slt i32 %211, %215
  br i1 %216, label %.lr.ph91, label %.loopexit.loopexit, !llvm.loop !43

.loopexit.loopexit:                               ; preds = %._crit_edge
  %.pre134 = load i32, ptr %43, align 8, !tbaa !32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %59, %.lr.ph95
  %217 = phi i32 [ %52, %.lr.ph95 ], [ %52, %59 ], [ %.pre134, %.loopexit.loopexit ]
  %218 = phi ptr [ %53, %.lr.ph95 ], [ %53, %59 ], [ %212, %.loopexit.loopexit ]
  %219 = phi ptr [ %54, %.lr.ph95 ], [ %53, %59 ], [ %212, %.loopexit.loopexit ]
  %.4 = phi i32 [ %.293, %.lr.ph95 ], [ %.293, %59 ], [ %210, %.loopexit.loopexit ]
  %indvars.iv.next126 = add nuw nsw i64 %indvars.iv125, 1
  %220 = sext i32 %217 to i64
  %221 = icmp slt i64 %indvars.iv.next126, %220
  br i1 %221, label %.lr.ph95, label %._crit_edge96, !llvm.loop !44

222:                                              ; preds = %1, %._crit_edge105
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN13medialSurface3vxlEiii(ptr noundef nonnull align 8 dereferenceable(252), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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, !11, i64 24}
!6 = !{!"_ZTS13medialSurface", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !11, i64 24, !11, i64 32, !7, i64 40, !12, i64 48, !13, i64 64, !17, i64 88, !21, i64 112, !22, i64 176, !24, i64 184, !24, i64 192, !24, i64 200, !24, i64 208, !24, i64 216, !24, i64 224, !10, i64 232, !24, i64 240, !22, i64 248}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!"_ZTS7segment", !10, i64 0, !8, i64 4, !7, i64 8}
!13 = !{!"_ZTSSt6vectorI5voxelSaIS0_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseI5voxelSaIS0_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseI5voxelSaIS0_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseI5voxelSaIS0_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!17 = !{!"_ZTSSt6vectorI10medialBallSaIS0_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseI10medialBallSaIS0_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseI10medialBallSaIS0_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseI10medialBallSaIS0_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!21 = !{!"_ZTS10medialBall", !7, i64 0, !22, i64 8, !22, i64 12, !22, i64 16, !23, i64 20, !22, i64 24, !23, i64 28, !23, i64 30, !23, i64 32, !23, i64 34, !23, i64 36, !7, i64 40, !7, i64 48, !7, i64 56}
!22 = !{!"float", !8, i64 0}
!23 = !{!"short", !8, i64 0}
!24 = !{!"double", !8, i64 0}
!25 = !{!6, !10, i64 16}
!26 = !{!6, !10, i64 12}
!27 = !{!6, !11, i64 32}
!28 = distinct !{!28, !29, !30}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!"llvm.loop.unswitch.partial.disable"}
!31 = !{!6, !7, i64 40}
!32 = !{!33, !10, i64 8}
!33 = !{!"_ZTS8segments", !7, i64 0, !10, i64 8}
!34 = !{!33, !7, i64 0}
!35 = distinct !{!35, !29}
!36 = !{!12, !8, i64 4}
!37 = !{!12, !10, i64 0}
!38 = !{!7, !7, i64 0}
!39 = !{!40, !7, i64 0}
!40 = !{!"_ZTS5voxel", !7, i64 0, !23, i64 8, !23, i64 10, !23, i64 12, !22, i64 16}
!41 = !{!40, !22, i64 16}
!42 = distinct !{!42, !29}
!43 = distinct !{!43, !29}
!44 = distinct !{!44, !29}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass