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

; 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.std::vector.31" = type { %"struct.std::_Vector_base.32" }
%"struct.std::_Vector_base.32" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.33" = type { i8 }
%"class.__gnu_cxx::__normal_iterator" = 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.inputDataNE = type { %class.InputFile.base, i32, i32, i32, i32, double, %class.var3.10, %"class.std::__cxx11::basic_string", i64, %"class.std::__cxx11::basic_string", %"class.std::vector.21", %class.segment, %"class.std::vector.44", %"class.std::vector.49", %class.voxelImageT }
%class.InputFile.base = type <{ %"class.std::vector.36", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8 }>
%"class.std::vector.36" = type { %"struct.std::_Vector_base.37" }
%"struct.std::_Vector_base.37" = type { %"struct.std::_Vector_base<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::allocator<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::allocator<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::allocator<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::allocator<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.var3.10 = type { double, double, double }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::vector.21" = type { %"struct.std::_Vector_base.22" }
%"struct.std::_Vector_base.22" = type { %"struct.std::_Vector_base<std::vector<segments>, std::allocator<std::vector<segments>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<segments>, std::allocator<std::vector<segments>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<segments>, std::allocator<std::vector<segments>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<segments>, std::allocator<std::vector<segments>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.44" = type { %"struct.std::_Vector_base.45" }
%"struct.std::_Vector_base.45" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.49" = type { %"struct.std::_Vector_base.50" }
%"struct.std::_Vector_base.50" = type { %"struct.std::_Vector_base<poroRange, std::allocator<poroRange>>::_Vector_impl" }
%"struct.std::_Vector_base<poroRange, std::allocator<poroRange>>::_Vector_impl" = type { %"struct.std::_Vector_base<poroRange, std::allocator<poroRange>>::_Vector_impl_data" }
%"struct.std::_Vector_base<poroRange, std::allocator<poroRange>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.voxelImageT = type { %class.voxelImageTBase, %class.voxelField, %class.var3.10, %class.var3.10 }
%class.voxelImageTBase = type { ptr }
%class.voxelField = type { ptr, i64, %class.var3, %"class.std::vector.5" }
%class.var3 = type { i32, i32, i32 }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { 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.15 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 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 nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13medialSurface12smoothRadiusEv(ptr noundef nonnull align 8 dereferenceable(252) %0) #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.std::vector.31", align 8
  %4 = alloca float, align 4
  %5 = alloca %"class.std::allocator.33", align 1
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca double, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca double, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca ptr, align 8
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca double, align 8
  %58 = alloca float, align 4
  %59 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %60 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %61 = load ptr, ptr %2, align 8
  %62 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.15)
  %63 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) %62)
  call void @llvm.lifetime.start.p0(i64 24, ptr %3) #6
  %64 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 9
  %65 = call noundef i64 @_ZNKSt6vectorI5voxelSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  store float 0.000000e+00, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKfRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %65, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %66 unwind label %77

66:                                               ; preds = %1
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  %67 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.16)
          to label %68 unwind label %81

68:                                               ; preds = %66
  %69 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) %67)
          to label %70 unwind label %81

70:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 0, ptr %8, align 4, !tbaa !11
  br label %71

71:                                               ; preds = %343, %70
  %72 = load i32, ptr %8, align 4, !tbaa !11
  %73 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 3
  %74 = load i32, ptr %73, align 8, !tbaa !13
  %75 = icmp slt i32 %72, %74
  br i1 %75, label %85, label %76

76:                                               ; preds = %71
  store i32 2, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %346

77:                                               ; preds = %1
  %78 = landingpad { ptr, i32 }
          cleanup
  %79 = extractvalue { ptr, i32 } %78, 0
  store ptr %79, ptr %6, align 8
  %80 = extractvalue { ptr, i32 } %78, 1
  store i32 %80, ptr %7, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  br label %683

81:                                               ; preds = %645, %643, %348, %346, %68, %66
  %82 = landingpad { ptr, i32 }
          cleanup
  %83 = extractvalue { ptr, i32 } %82, 0
  store ptr %83, ptr %6, align 8
  %84 = extractvalue { ptr, i32 } %82, 1
  store i32 %84, ptr %7, align 4
  br label %682

85:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !11
  br label %86

86:                                               ; preds = %339, %85
  %87 = load i32, ptr %10, align 4, !tbaa !11
  %88 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 2
  %89 = load i32, ptr %88, align 4, !tbaa !28
  %90 = icmp slt i32 %87, %89
  br i1 %90, label %92, label %91

91:                                               ; preds = %86
  store i32 5, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %342

92:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %93 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 0
  %94 = load ptr, ptr %93, align 8, !tbaa !29
  %95 = getelementptr inbounds %class.inputDataNE, ptr %94, i32 0, i32 10
  %96 = load i32, ptr %8, align 4, !tbaa !11
  %97 = sext i32 %96 to i64
  %98 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_I8segmentsSaIS0_EESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %95, i64 noundef %97) #6
  %99 = load i32, ptr %10, align 4, !tbaa !11
  %100 = sext i32 %99 to i64
  %101 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNKSt6vectorI8segmentsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %98, i64 noundef %100) #6
  store ptr %101, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store i32 0, ptr %12, align 4, !tbaa !11
  br label %102

102:                                              ; preds = %335, %92
  %103 = load i32, ptr %12, align 4, !tbaa !11
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = getelementptr inbounds %class.segments, ptr %104, i32 0, i32 1
  %106 = load i32, ptr %105, align 8, !tbaa !30
  %107 = icmp slt i32 %103, %106
  br i1 %107, label %109, label %108

108:                                              ; preds = %102
  store i32 8, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  br label %338

109:                                              ; preds = %102
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  %111 = getelementptr inbounds %class.segments, ptr %110, i32 0, i32 0
  %112 = load ptr, ptr %111, align 8, !tbaa !32
  %113 = load i32, ptr %12, align 4, !tbaa !11
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds %class.segment, ptr %112, i64 %114
  %116 = getelementptr inbounds %class.segment, ptr %115, i32 0, i32 1
  %117 = load i8, ptr %116, align 4, !tbaa !33
  %118 = zext i8 %117 to i32
  %119 = icmp eq i32 %118, 0
  br i1 %119, label %120, label %334

120:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = getelementptr inbounds %class.segments, ptr %121, i32 0, i32 0
  %123 = load ptr, ptr %122, align 8, !tbaa !32
  %124 = load i32, ptr %12, align 4, !tbaa !11
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds %class.segment, ptr %123, i64 %125
  store ptr %126, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %127 = load ptr, ptr %13, align 8, !tbaa !5
  %128 = getelementptr inbounds %class.segment, ptr %127, i32 0, i32 0
  %129 = load i32, ptr %128, align 8, !tbaa !34
  store i32 %129, ptr %14, align 4, !tbaa !11
  br label %130

130:                                              ; preds = %330, %120
  %131 = load i32, ptr %14, align 4, !tbaa !11
  %132 = load ptr, ptr %11, align 8, !tbaa !5
  %133 = getelementptr inbounds %class.segments, ptr %132, i32 0, i32 0
  %134 = load ptr, ptr %133, align 8, !tbaa !32
  %135 = load i32, ptr %12, align 4, !tbaa !11
  %136 = add nsw i32 %135, 1
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds %class.segment, ptr %134, i64 %137
  %139 = getelementptr inbounds %class.segment, ptr %138, i32 0, i32 0
  %140 = load i32, ptr %139, align 8, !tbaa !34
  %141 = icmp slt i32 %131, %140
  br i1 %141, label %143, label %142

142:                                              ; preds = %130
  store i32 11, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %333

143:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  store double 0.000000e+00, ptr %15, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 0, ptr %16, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  %144 = load i32, ptr %8, align 4, !tbaa !11
  %145 = sub nsw i32 %144, 1
  store i32 %145, ptr %18, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !11
  %146 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %147 unwind label %159

147:                                              ; preds = %143
  %148 = load i32, ptr %146, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  store i32 %148, ptr %17, align 4, !tbaa !11
  br label %149

149:                                              ; preds = %286, %147
  %150 = load i32, ptr %17, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %151 = load i32, ptr %8, align 4, !tbaa !11
  %152 = add nsw i32 %151, 2
  store i32 %152, ptr %20, align 4, !tbaa !11
  %153 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 3
  %154 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %153)
          to label %155 unwind label %163

155:                                              ; preds = %149
  %156 = load i32, ptr %154, align 4, !tbaa !11
  %157 = icmp slt i32 %150, %156
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br i1 %157, label %167, label %158

158:                                              ; preds = %155
  store i32 14, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %290

159:                                              ; preds = %143
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %6, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %289

163:                                              ; preds = %149
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %6, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %289

167:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %168 = load i32, ptr %10, align 4, !tbaa !11
  %169 = sub nsw i32 %168, 1
  store i32 %169, ptr %22, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 0, ptr %23, align 4, !tbaa !11
  %170 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %171 unwind label %183

171:                                              ; preds = %167
  %172 = load i32, ptr %170, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  store i32 %172, ptr %21, align 4, !tbaa !11
  br label %173

173:                                              ; preds = %279, %171
  %174 = load i32, ptr %21, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %175 = load i32, ptr %10, align 4, !tbaa !11
  %176 = add nsw i32 %175, 2
  store i32 %176, ptr %24, align 4, !tbaa !11
  %177 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 2
  %178 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %177)
          to label %179 unwind label %187

179:                                              ; preds = %173
  %180 = load i32, ptr %178, align 4, !tbaa !11
  %181 = icmp slt i32 %174, %180
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br i1 %181, label %191, label %182

182:                                              ; preds = %179
  store i32 17, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  br label %285

183:                                              ; preds = %167
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %6, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %284

187:                                              ; preds = %173
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %6, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %284

191:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %192 = load i32, ptr %14, align 4, !tbaa !11
  %193 = sub nsw i32 %192, 1
  store i32 %193, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store i32 0, ptr %27, align 4, !tbaa !11
  %194 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %26, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %195 unwind label %222

195:                                              ; preds = %191
  %196 = load i32, ptr %194, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  store i32 %196, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %197 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !29
  %199 = load i32, ptr %25, align 4, !tbaa !11
  %200 = load i32, ptr %21, align 4, !tbaa !11
  %201 = load i32, ptr %17, align 4, !tbaa !11
  %202 = invoke noundef ptr @_ZNK11inputDataNE6segptrEiii(ptr noundef nonnull align 8 dereferenceable(448) %198, i32 noundef %199, i32 noundef %200, i32 noundef %201)
          to label %203 unwind label %226

203:                                              ; preds = %195
  store ptr %202, ptr %28, align 8, !tbaa !5
  %204 = load ptr, ptr %28, align 8, !tbaa !5
  %205 = getelementptr inbounds %class.segment, ptr %204, i32 0, i32 1
  %206 = load i8, ptr %205, align 4, !tbaa !33
  %207 = zext i8 %206 to i32
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %230

209:                                              ; preds = %203
  %210 = load ptr, ptr %28, align 8, !tbaa !5
  %211 = getelementptr inbounds %class.segment, ptr %210, i64 1
  %212 = getelementptr inbounds %class.segment, ptr %211, i32 0, i32 1
  %213 = load i8, ptr %212, align 4, !tbaa !33
  %214 = zext i8 %213 to i32
  %215 = icmp eq i32 %214, 0
  br i1 %215, label %216, label %230

216:                                              ; preds = %209
  %217 = load ptr, ptr %28, align 8, !tbaa !5
  %218 = getelementptr inbounds %class.segment, ptr %217, i32 1
  store ptr %218, ptr %28, align 8, !tbaa !5
  %219 = load ptr, ptr %28, align 8, !tbaa !5
  %220 = getelementptr inbounds %class.segment, ptr %219, i32 0, i32 0
  %221 = load i32, ptr %220, align 8, !tbaa !34
  store i32 %221, ptr %25, align 4, !tbaa !11
  br label %230

222:                                              ; preds = %191
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %6, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %283

226:                                              ; preds = %195
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %6, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %7, align 4
  br label %282

230:                                              ; preds = %216, %209, %203
  %231 = load ptr, ptr %28, align 8, !tbaa !5
  %232 = getelementptr inbounds %class.segment, ptr %231, i32 0, i32 1
  %233 = load i8, ptr %232, align 4, !tbaa !33
  %234 = zext i8 %233 to i32
  %235 = icmp eq i32 %234, 0
  br i1 %235, label %236, label %278

236:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %237 = load ptr, ptr %28, align 8, !tbaa !5
  %238 = getelementptr inbounds %class.segment, ptr %237, i64 1
  %239 = getelementptr inbounds %class.segment, ptr %238, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  %240 = load i32, ptr %14, align 4, !tbaa !11
  %241 = add nsw i32 %240, 2
  store i32 %241, ptr %30, align 4, !tbaa !11
  %242 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %239, ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %243 unwind label %273

243:                                              ; preds = %236
  %244 = load i32, ptr %242, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  store i32 %244, ptr %29, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %245 = load ptr, ptr %28, align 8, !tbaa !5
  %246 = getelementptr inbounds %class.segment, ptr %245, i32 0, i32 2
  %247 = load ptr, ptr %246, align 8, !tbaa !36
  %248 = load i32, ptr %25, align 4, !tbaa !11
  %249 = load ptr, ptr %28, align 8, !tbaa !5
  %250 = getelementptr inbounds %class.segment, ptr %249, i32 0, i32 0
  %251 = load i32, ptr %250, align 8, !tbaa !34
  %252 = sub nsw i32 %248, %251
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds %class.voxel, ptr %247, i64 %253
  store ptr %254, ptr %31, align 8, !tbaa !5
  br label %255

255:                                              ; preds = %270, %243
  %256 = load i32, ptr %25, align 4, !tbaa !11
  %257 = load i32, ptr %29, align 4, !tbaa !11
  %258 = icmp slt i32 %256, %257
  br i1 %258, label %259, label %277

259:                                              ; preds = %255
  %260 = load ptr, ptr %31, align 8, !tbaa !5
  %261 = getelementptr inbounds %class.voxel, ptr %260, i32 0, i32 5
  %262 = load float, ptr %261, align 8, !tbaa !37
  %263 = fpext float %262 to double
  %264 = load double, ptr %15, align 8, !tbaa !35
  %265 = fadd double %264, %263
  store double %265, ptr %15, align 8, !tbaa !35
  %266 = load ptr, ptr %31, align 8, !tbaa !5
  %267 = getelementptr inbounds %class.voxel, ptr %266, i32 1
  store ptr %267, ptr %31, align 8, !tbaa !5
  %268 = load i32, ptr %16, align 4, !tbaa !11
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %16, align 4, !tbaa !11
  br label %270

270:                                              ; preds = %259
  %271 = load i32, ptr %25, align 4, !tbaa !11
  %272 = add nsw i32 %271, 1
  store i32 %272, ptr %25, align 4, !tbaa !11
  br label %255, !llvm.loop !39

273:                                              ; preds = %236
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %6, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  br label %282

277:                                              ; preds = %255
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  br label %278

278:                                              ; preds = %277, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %279

279:                                              ; preds = %278
  %280 = load i32, ptr %21, align 4, !tbaa !11
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %21, align 4, !tbaa !11
  br label %173, !llvm.loop !41

282:                                              ; preds = %273, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %283

283:                                              ; preds = %282, %222
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %284

284:                                              ; preds = %283, %187, %183
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  br label %289

285:                                              ; preds = %182
  br label %286

286:                                              ; preds = %285
  %287 = load i32, ptr %17, align 4, !tbaa !11
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %17, align 4, !tbaa !11
  br label %149, !llvm.loop !42

289:                                              ; preds = %284, %163, %159
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  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 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %682

290:                                              ; preds = %158
  %291 = load double, ptr %15, align 8, !tbaa !35
  %292 = fmul double 4.000000e+00, %291
  %293 = load i32, ptr %16, align 4, !tbaa !11
  %294 = mul nsw i32 3, %293
  %295 = add nsw i32 %294, 27
  %296 = sitofp i32 %295 to double
  %297 = fdiv double %292, %296
  %298 = load ptr, ptr %13, align 8, !tbaa !5
  %299 = getelementptr inbounds %class.segment, ptr %298, i32 0, i32 2
  %300 = load ptr, ptr %299, align 8, !tbaa !36
  %301 = load i32, ptr %14, align 4, !tbaa !11
  %302 = load ptr, ptr %13, align 8, !tbaa !5
  %303 = getelementptr inbounds %class.segment, ptr %302, i32 0, i32 0
  %304 = load i32, ptr %303, align 8, !tbaa !34
  %305 = sub nsw i32 %301, %304
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds %class.voxel, ptr %300, i64 %306
  %308 = getelementptr inbounds %class.voxel, ptr %307, i32 0, i32 5
  %309 = load float, ptr %308, align 8, !tbaa !37
  %310 = fpext float %309 to double
  %311 = fsub double %297, %310
  %312 = fptrunc double %311 to float
  %313 = load ptr, ptr %13, align 8, !tbaa !5
  %314 = getelementptr inbounds %class.segment, ptr %313, i32 0, i32 2
  %315 = load ptr, ptr %314, align 8, !tbaa !36
  %316 = load i32, ptr %14, align 4, !tbaa !11
  %317 = load ptr, ptr %13, align 8, !tbaa !5
  %318 = getelementptr inbounds %class.segment, ptr %317, i32 0, i32 0
  %319 = load i32, ptr %318, align 8, !tbaa !34
  %320 = sub nsw i32 %316, %319
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds %class.voxel, ptr %315, i64 %321
  %323 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 9
  %324 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNSt6vectorI5voxelSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %323, i64 noundef 0) #6
  %325 = ptrtoint ptr %322 to i64
  %326 = ptrtoint ptr %324 to i64
  %327 = sub i64 %325, %326
  %328 = sdiv exact i64 %327, 24
  %329 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %328) #6
  store float %312, ptr %329, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %330

330:                                              ; preds = %290
  %331 = load i32, ptr %14, align 4, !tbaa !11
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %14, align 4, !tbaa !11
  br label %130, !llvm.loop !43

333:                                              ; preds = %142
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  br label %334

334:                                              ; preds = %333, %109
  br label %335

335:                                              ; preds = %334
  %336 = load i32, ptr %12, align 4, !tbaa !11
  %337 = add nsw i32 %336, 1
  store i32 %337, ptr %12, align 4, !tbaa !11
  br label %102, !llvm.loop !44

338:                                              ; preds = %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  br label %339

339:                                              ; preds = %338
  %340 = load i32, ptr %10, align 4, !tbaa !11
  %341 = add nsw i32 %340, 1
  store i32 %341, ptr %10, align 4, !tbaa !11
  br label %86, !llvm.loop !45

342:                                              ; preds = %91
  br label %343

343:                                              ; preds = %342
  %344 = load i32, ptr %8, align 4, !tbaa !11
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %8, align 4, !tbaa !11
  br label %71, !llvm.loop !46

346:                                              ; preds = %76
  %347 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.16)
          to label %348 unwind label %81

348:                                              ; preds = %346
  %349 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) %347)
          to label %350 unwind label %81

350:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  store i32 0, ptr %32, align 4, !tbaa !11
  br label %351

351:                                              ; preds = %640, %350
  %352 = load i32, ptr %32, align 4, !tbaa !11
  %353 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 3
  %354 = load i32, ptr %353, align 8, !tbaa !13
  %355 = icmp slt i32 %352, %354
  br i1 %355, label %357, label %356

356:                                              ; preds = %351
  store i32 23, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %643

357:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %358

358:                                              ; preds = %636, %357
  %359 = load i32, ptr %33, align 4, !tbaa !11
  %360 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 2
  %361 = load i32, ptr %360, align 4, !tbaa !28
  %362 = icmp slt i32 %359, %361
  br i1 %362, label %364, label %363

363:                                              ; preds = %358
  store i32 26, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  br label %639

364:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %365 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 0
  %366 = load ptr, ptr %365, align 8, !tbaa !29
  %367 = getelementptr inbounds %class.inputDataNE, ptr %366, i32 0, i32 10
  %368 = load i32, ptr %32, align 4, !tbaa !11
  %369 = sext i32 %368 to i64
  %370 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_I8segmentsSaIS0_EESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %367, i64 noundef %369) #6
  %371 = load i32, ptr %33, align 4, !tbaa !11
  %372 = sext i32 %371 to i64
  %373 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNKSt6vectorI8segmentsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %370, i64 noundef %372) #6
  store ptr %373, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  store i32 0, ptr %35, align 4, !tbaa !11
  br label %374

374:                                              ; preds = %632, %364
  %375 = load i32, ptr %35, align 4, !tbaa !11
  %376 = load ptr, ptr %34, align 8, !tbaa !5
  %377 = getelementptr inbounds %class.segments, ptr %376, i32 0, i32 1
  %378 = load i32, ptr %377, align 8, !tbaa !30
  %379 = icmp slt i32 %375, %378
  br i1 %379, label %381, label %380

380:                                              ; preds = %374
  store i32 29, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %635

381:                                              ; preds = %374
  %382 = load ptr, ptr %34, align 8, !tbaa !5
  %383 = getelementptr inbounds %class.segments, ptr %382, i32 0, i32 0
  %384 = load ptr, ptr %383, align 8, !tbaa !32
  %385 = load i32, ptr %35, align 4, !tbaa !11
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds %class.segment, ptr %384, i64 %386
  %388 = getelementptr inbounds %class.segment, ptr %387, i32 0, i32 1
  %389 = load i8, ptr %388, align 4, !tbaa !33
  %390 = zext i8 %389 to i32
  %391 = icmp eq i32 %390, 0
  br i1 %391, label %392, label %631

392:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %393 = load ptr, ptr %34, align 8, !tbaa !5
  %394 = getelementptr inbounds %class.segments, ptr %393, i32 0, i32 0
  %395 = load ptr, ptr %394, align 8, !tbaa !32
  %396 = load i32, ptr %35, align 4, !tbaa !11
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds %class.segment, ptr %395, i64 %397
  store ptr %398, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  %399 = load ptr, ptr %36, align 8, !tbaa !5
  %400 = getelementptr inbounds %class.segment, ptr %399, i32 0, i32 0
  %401 = load i32, ptr %400, align 8, !tbaa !34
  store i32 %401, ptr %37, align 4, !tbaa !11
  br label %402

402:                                              ; preds = %617, %392
  %403 = load i32, ptr %37, align 4, !tbaa !11
  %404 = load ptr, ptr %34, align 8, !tbaa !5
  %405 = getelementptr inbounds %class.segments, ptr %404, i32 0, i32 0
  %406 = load ptr, ptr %405, align 8, !tbaa !32
  %407 = load i32, ptr %35, align 4, !tbaa !11
  %408 = add nsw i32 %407, 1
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds %class.segment, ptr %406, i64 %409
  %411 = getelementptr inbounds %class.segment, ptr %410, i32 0, i32 0
  %412 = load i32, ptr %411, align 8, !tbaa !34
  %413 = icmp slt i32 %403, %412
  br i1 %413, label %415, label %414

414:                                              ; preds = %402
  store i32 32, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  br label %630

415:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  store double 0.000000e+00, ptr %38, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  store i32 0, ptr %39, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  %416 = load i32, ptr %32, align 4, !tbaa !11
  %417 = sub nsw i32 %416, 1
  store i32 %417, ptr %41, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  store i32 0, ptr %42, align 4, !tbaa !11
  %418 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %41, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %419 unwind label %431

419:                                              ; preds = %415
  %420 = load i32, ptr %418, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  store i32 %420, ptr %40, align 4, !tbaa !11
  br label %421

421:                                              ; preds = %564, %419
  %422 = load i32, ptr %40, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  %423 = load i32, ptr %32, align 4, !tbaa !11
  %424 = add nsw i32 %423, 2
  store i32 %424, ptr %43, align 4, !tbaa !11
  %425 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 3
  %426 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %43, ptr noundef nonnull align 4 dereferenceable(4) %425)
          to label %427 unwind label %435

427:                                              ; preds = %421
  %428 = load i32, ptr %426, align 4, !tbaa !11
  %429 = icmp slt i32 %422, %428
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  br i1 %429, label %439, label %430

430:                                              ; preds = %427
  store i32 35, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  br label %568

431:                                              ; preds = %415
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %6, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  br label %567

435:                                              ; preds = %421
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %6, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  br label %567

439:                                              ; preds = %427
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  %440 = load i32, ptr %33, align 4, !tbaa !11
  %441 = sub nsw i32 %440, 1
  store i32 %441, ptr %45, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  store i32 0, ptr %46, align 4, !tbaa !11
  %442 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %45, ptr noundef nonnull align 4 dereferenceable(4) %46)
          to label %443 unwind label %455

443:                                              ; preds = %439
  %444 = load i32, ptr %442, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  store i32 %444, ptr %44, align 4, !tbaa !11
  br label %445

445:                                              ; preds = %557, %443
  %446 = load i32, ptr %44, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  %447 = load i32, ptr %33, align 4, !tbaa !11
  %448 = add nsw i32 %447, 2
  store i32 %448, ptr %47, align 4, !tbaa !11
  %449 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 2
  %450 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %47, ptr noundef nonnull align 4 dereferenceable(4) %449)
          to label %451 unwind label %459

451:                                              ; preds = %445
  %452 = load i32, ptr %450, align 4, !tbaa !11
  %453 = icmp slt i32 %446, %452
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  br i1 %453, label %463, label %454

454:                                              ; preds = %451
  store i32 38, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  br label %563

455:                                              ; preds = %439
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %6, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  br label %562

459:                                              ; preds = %445
  %460 = landingpad { ptr, i32 }
          cleanup
  %461 = extractvalue { ptr, i32 } %460, 0
  store ptr %461, ptr %6, align 8
  %462 = extractvalue { ptr, i32 } %460, 1
  store i32 %462, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  br label %562

463:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  %464 = load i32, ptr %37, align 4, !tbaa !11
  %465 = sub nsw i32 %464, 1
  store i32 %465, ptr %49, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  store i32 0, ptr %50, align 4, !tbaa !11
  %466 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %49, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %467 unwind label %494

467:                                              ; preds = %463
  %468 = load i32, ptr %466, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  store i32 %468, ptr %48, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  %469 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 0
  %470 = load ptr, ptr %469, align 8, !tbaa !29
  %471 = load i32, ptr %48, align 4, !tbaa !11
  %472 = load i32, ptr %44, align 4, !tbaa !11
  %473 = load i32, ptr %40, align 4, !tbaa !11
  %474 = invoke noundef ptr @_ZNK11inputDataNE6segptrEiii(ptr noundef nonnull align 8 dereferenceable(448) %470, i32 noundef %471, i32 noundef %472, i32 noundef %473)
          to label %475 unwind label %498

475:                                              ; preds = %467
  store ptr %474, ptr %51, align 8, !tbaa !5
  %476 = load ptr, ptr %51, align 8, !tbaa !5
  %477 = getelementptr inbounds %class.segment, ptr %476, i32 0, i32 1
  %478 = load i8, ptr %477, align 4, !tbaa !33
  %479 = zext i8 %478 to i32
  %480 = icmp ne i32 %479, 0
  br i1 %480, label %481, label %502

481:                                              ; preds = %475
  %482 = load ptr, ptr %51, align 8, !tbaa !5
  %483 = getelementptr inbounds %class.segment, ptr %482, i64 1
  %484 = getelementptr inbounds %class.segment, ptr %483, i32 0, i32 1
  %485 = load i8, ptr %484, align 4, !tbaa !33
  %486 = zext i8 %485 to i32
  %487 = icmp eq i32 %486, 0
  br i1 %487, label %488, label %502

488:                                              ; preds = %481
  %489 = load ptr, ptr %51, align 8, !tbaa !5
  %490 = getelementptr inbounds %class.segment, ptr %489, i32 1
  store ptr %490, ptr %51, align 8, !tbaa !5
  %491 = load ptr, ptr %51, align 8, !tbaa !5
  %492 = getelementptr inbounds %class.segment, ptr %491, i32 0, i32 0
  %493 = load i32, ptr %492, align 8, !tbaa !34
  store i32 %493, ptr %48, align 4, !tbaa !11
  br label %502

494:                                              ; preds = %463
  %495 = landingpad { ptr, i32 }
          cleanup
  %496 = extractvalue { ptr, i32 } %495, 0
  store ptr %496, ptr %6, align 8
  %497 = extractvalue { ptr, i32 } %495, 1
  store i32 %497, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  br label %561

498:                                              ; preds = %467
  %499 = landingpad { ptr, i32 }
          cleanup
  %500 = extractvalue { ptr, i32 } %499, 0
  store ptr %500, ptr %6, align 8
  %501 = extractvalue { ptr, i32 } %499, 1
  store i32 %501, ptr %7, align 4
  br label %560

502:                                              ; preds = %488, %481, %475
  %503 = load ptr, ptr %51, align 8, !tbaa !5
  %504 = getelementptr inbounds %class.segment, ptr %503, i32 0, i32 1
  %505 = load i8, ptr %504, align 4, !tbaa !33
  %506 = zext i8 %505 to i32
  %507 = icmp eq i32 %506, 0
  br i1 %507, label %508, label %556

508:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  %509 = load ptr, ptr %51, align 8, !tbaa !5
  %510 = getelementptr inbounds %class.segment, ptr %509, i64 1
  %511 = getelementptr inbounds %class.segment, ptr %510, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  %512 = load i32, ptr %37, align 4, !tbaa !11
  %513 = add nsw i32 %512, 2
  store i32 %513, ptr %53, align 4, !tbaa !11
  %514 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %511, ptr noundef nonnull align 4 dereferenceable(4) %53)
          to label %515 unwind label %551

515:                                              ; preds = %508
  %516 = load i32, ptr %514, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  store i32 %516, ptr %52, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  %517 = load ptr, ptr %51, align 8, !tbaa !5
  %518 = getelementptr inbounds %class.segment, ptr %517, i32 0, i32 2
  %519 = load ptr, ptr %518, align 8, !tbaa !36
  %520 = load i32, ptr %48, align 4, !tbaa !11
  %521 = load ptr, ptr %51, align 8, !tbaa !5
  %522 = getelementptr inbounds %class.segment, ptr %521, i32 0, i32 0
  %523 = load i32, ptr %522, align 8, !tbaa !34
  %524 = sub nsw i32 %520, %523
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds %class.voxel, ptr %519, i64 %525
  store ptr %526, ptr %54, align 8, !tbaa !5
  br label %527

527:                                              ; preds = %548, %515
  %528 = load i32, ptr %48, align 4, !tbaa !11
  %529 = load i32, ptr %52, align 4, !tbaa !11
  %530 = icmp slt i32 %528, %529
  br i1 %530, label %531, label %555

531:                                              ; preds = %527
  %532 = load ptr, ptr %54, align 8, !tbaa !5
  %533 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 9
  %534 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNSt6vectorI5voxelSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %533, i64 noundef 0) #6
  %535 = ptrtoint ptr %532 to i64
  %536 = ptrtoint ptr %534 to i64
  %537 = sub i64 %535, %536
  %538 = sdiv exact i64 %537, 24
  %539 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %538) #6
  %540 = load float, ptr %539, align 4, !tbaa !9
  %541 = fpext float %540 to double
  %542 = load double, ptr %38, align 8, !tbaa !35
  %543 = fadd double %542, %541
  store double %543, ptr %38, align 8, !tbaa !35
  %544 = load ptr, ptr %54, align 8, !tbaa !5
  %545 = getelementptr inbounds %class.voxel, ptr %544, i32 1
  store ptr %545, ptr %54, align 8, !tbaa !5
  %546 = load i32, ptr %39, align 4, !tbaa !11
  %547 = add nsw i32 %546, 1
  store i32 %547, ptr %39, align 4, !tbaa !11
  br label %548

548:                                              ; preds = %531
  %549 = load i32, ptr %48, align 4, !tbaa !11
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr %48, align 4, !tbaa !11
  br label %527, !llvm.loop !47

551:                                              ; preds = %508
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %6, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  br label %560

555:                                              ; preds = %527
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  br label %556

556:                                              ; preds = %555, %502
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  br label %557

557:                                              ; preds = %556
  %558 = load i32, ptr %44, align 4, !tbaa !11
  %559 = add nsw i32 %558, 1
  store i32 %559, ptr %44, align 4, !tbaa !11
  br label %445, !llvm.loop !48

560:                                              ; preds = %551, %498
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  br label %561

561:                                              ; preds = %560, %494
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  br label %562

562:                                              ; preds = %561, %459, %455
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  br label %567

563:                                              ; preds = %454
  br label %564

564:                                              ; preds = %563
  %565 = load i32, ptr %40, align 4, !tbaa !11
  %566 = add nsw i32 %565, 1
  store i32 %566, ptr %40, align 4, !tbaa !11
  br label %421, !llvm.loop !49

567:                                              ; preds = %562, %435, %431
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  br label %629

568:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #6
  %569 = load ptr, ptr %36, align 8, !tbaa !5
  %570 = getelementptr inbounds %class.segment, ptr %569, i32 0, i32 2
  %571 = load ptr, ptr %570, align 8, !tbaa !36
  %572 = load i32, ptr %37, align 4, !tbaa !11
  %573 = load ptr, ptr %36, align 8, !tbaa !5
  %574 = getelementptr inbounds %class.segment, ptr %573, i32 0, i32 0
  %575 = load i32, ptr %574, align 8, !tbaa !34
  %576 = sub nsw i32 %572, %575
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds %class.voxel, ptr %571, i64 %577
  %579 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 9
  %580 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNSt6vectorI5voxelSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %579, i64 noundef 0) #6
  %581 = ptrtoint ptr %578 to i64
  %582 = ptrtoint ptr %580 to i64
  %583 = sub i64 %581, %582
  %584 = sdiv exact i64 %583, 24
  %585 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %584) #6
  %586 = load float, ptr %585, align 4, !tbaa !9
  %587 = fpext float %586 to double
  %588 = load double, ptr %38, align 8, !tbaa !35
  %589 = fmul double 1.980000e+00, %588
  %590 = load i32, ptr %39, align 4, !tbaa !11
  %591 = mul nsw i32 1, %590
  %592 = add nsw i32 %591, 27
  %593 = sitofp i32 %592 to double
  %594 = fdiv double %589, %593
  %595 = fsub double %587, %594
  %596 = fmul double 2.000000e-02, %595
  store double %596, ptr %55, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  store double -5.000000e-03, ptr %56, align 8, !tbaa !35
  %597 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %598 unwind label %620

598:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  store double 1.000000e-02, ptr %57, align 8, !tbaa !35
  %599 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %597, ptr noundef nonnull align 8 dereferenceable(8) %57)
          to label %600 unwind label %624

600:                                              ; preds = %598
  %601 = load double, ptr %599, align 8, !tbaa !35
  %602 = load ptr, ptr %36, align 8, !tbaa !5
  %603 = getelementptr inbounds %class.segment, ptr %602, i32 0, i32 2
  %604 = load ptr, ptr %603, align 8, !tbaa !36
  %605 = load i32, ptr %37, align 4, !tbaa !11
  %606 = load ptr, ptr %36, align 8, !tbaa !5
  %607 = getelementptr inbounds %class.segment, ptr %606, i32 0, i32 0
  %608 = load i32, ptr %607, align 8, !tbaa !34
  %609 = sub nsw i32 %605, %608
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds %class.voxel, ptr %604, i64 %610
  %612 = getelementptr inbounds %class.voxel, ptr %611, i32 0, i32 5
  %613 = load float, ptr %612, align 8, !tbaa !37
  %614 = fpext float %613 to double
  %615 = fadd double %614, %601
  %616 = fptrunc double %615 to float
  store float %616, ptr %612, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %617

617:                                              ; preds = %600
  %618 = load i32, ptr %37, align 4, !tbaa !11
  %619 = add nsw i32 %618, 1
  store i32 %619, ptr %37, align 4, !tbaa !11
  br label %402, !llvm.loop !50

620:                                              ; preds = %568
  %621 = landingpad { ptr, i32 }
          cleanup
  %622 = extractvalue { ptr, i32 } %621, 0
  store ptr %622, ptr %6, align 8
  %623 = extractvalue { ptr, i32 } %621, 1
  store i32 %623, ptr %7, align 4
  br label %628

624:                                              ; preds = %598
  %625 = landingpad { ptr, i32 }
          cleanup
  %626 = extractvalue { ptr, i32 } %625, 0
  store ptr %626, ptr %6, align 8
  %627 = extractvalue { ptr, i32 } %625, 1
  store i32 %627, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  br label %628

628:                                              ; preds = %624, %620
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  br label %629

629:                                              ; preds = %628, %567
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %682

630:                                              ; preds = %414
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %631

631:                                              ; preds = %630, %381
  br label %632

632:                                              ; preds = %631
  %633 = load i32, ptr %35, align 4, !tbaa !11
  %634 = add nsw i32 %633, 1
  store i32 %634, ptr %35, align 4, !tbaa !11
  br label %374, !llvm.loop !51

635:                                              ; preds = %380
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %636

636:                                              ; preds = %635
  %637 = load i32, ptr %33, align 4, !tbaa !11
  %638 = add nsw i32 %637, 1
  store i32 %638, ptr %33, align 4, !tbaa !11
  br label %358, !llvm.loop !52

639:                                              ; preds = %363
  br label %640

640:                                              ; preds = %639
  %641 = load i32, ptr %32, align 4, !tbaa !11
  %642 = add nsw i32 %641, 1
  store i32 %642, ptr %32, align 4, !tbaa !11
  br label %351, !llvm.loop !53

643:                                              ; preds = %356
  %644 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.16)
          to label %645 unwind label %81

645:                                              ; preds = %643
  %646 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) %644)
          to label %647 unwind label %81

647:                                              ; preds = %645
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  store float 0.000000e+00, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #6
  %648 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 9
  %649 = call ptr @_ZNSt6vectorI5voxelSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %648) #6
  %650 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %59, i32 0, i32 0
  store ptr %649, ptr %650, align 8
  br label %651

651:                                              ; preds = %663, %647
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #6
  %652 = getelementptr inbounds %class.medialSurface, ptr %61, i32 0, i32 9
  %653 = call ptr @_ZNSt6vectorI5voxelSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %652) #6
  %654 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %60, i32 0, i32 0
  store ptr %653, ptr %654, align 8
  %655 = call noundef zeroext i1 @_ZN9__gnu_cxxltIP5voxelSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %60) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  br i1 %655, label %657, label %656

656:                                              ; preds = %651
  store i32 44, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #6
  br label %669

657:                                              ; preds = %651
  %658 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIP5voxelSt6vectorIS1_SaIS1_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #6
  %659 = getelementptr inbounds %class.voxel, ptr %658, i32 0, i32 5
  %660 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %58, ptr noundef nonnull align 4 dereferenceable(4) %659)
          to label %661 unwind label %665

661:                                              ; preds = %657
  %662 = load float, ptr %660, align 4, !tbaa !9
  store float %662, ptr %58, align 4, !tbaa !9
  br label %663

663:                                              ; preds = %661
  %664 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP5voxelSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #6
  br label %651, !llvm.loop !54

665:                                              ; preds = %657
  %666 = landingpad { ptr, i32 }
          cleanup
  %667 = extractvalue { ptr, i32 } %666, 0
  store ptr %667, ptr %6, align 8
  %668 = extractvalue { ptr, i32 } %666, 1
  store i32 %668, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #6
  br label %681

669:                                              ; preds = %656
  %670 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.17)
          to label %671 unwind label %677

671:                                              ; preds = %669
  %672 = load float, ptr %58, align 4, !tbaa !9
  %673 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %670, float noundef %672)
          to label %674 unwind label %677

674:                                              ; preds = %671
  %675 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %673, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %676 unwind label %677

676:                                              ; preds = %674
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #6
  ret void

677:                                              ; preds = %674, %671, %669
  %678 = landingpad { ptr, i32 }
          cleanup
  %679 = extractvalue { ptr, i32 } %678, 0
  store ptr %679, ptr %6, align 8
  %680 = extractvalue { ptr, i32 } %678, 1
  store i32 %680, ptr %7, align 4
  br label %681

681:                                              ; preds = %677, %665
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  br label %682

682:                                              ; preds = %681, %629, %289, %81
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  br label %683

683:                                              ; preds = %682, %77
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #6
  br label %684

684:                                              ; preds = %683
  %685 = load ptr, ptr %6, align 8
  %686 = load i32, ptr %7, align 4
  %687 = insertvalue { ptr, i32 } poison, ptr %685, 0
  %688 = insertvalue { ptr, i32 } %687, i32 %686, 1
  resume { ptr, i32 } %688
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEEC2EmRKfRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxltIP5voxelSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIP5voxelSt6vectorIS1_SaIS1_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP5voxelSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint 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 #2 = { 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 #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 = { "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 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 #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, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 16}
!14 = !{!"_ZTS13medialSurface", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !15, i64 24, !15, i64 32, !6, i64 40, !16, i64 48, !17, i64 64, !21, i64 88, !25, i64 112, !10, i64 176, !27, i64 184, !27, i64 192, !27, i64 200, !27, i64 208, !27, i64 216, !27, i64 224, !12, i64 232, !27, i64 240, !10, i64 248}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTS7segment", !12, i64 0, !7, i64 4, !6, i64 8}
!17 = !{!"_ZTSSt6vectorI5voxelSaIS0_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseI5voxelSaIS0_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseI5voxelSaIS0_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseI5voxelSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSSt6vectorI10medialBallSaIS0_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseI10medialBallSaIS0_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseI10medialBallSaIS0_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseI10medialBallSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"_ZTS10medialBall", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !26, i64 20, !10, i64 24, !26, i64 28, !26, i64 30, !26, i64 32, !26, i64 34, !26, i64 36, !6, i64 40, !6, i64 48, !6, i64 56}
!26 = !{!"short", !7, i64 0}
!27 = !{!"double", !7, i64 0}
!28 = !{!14, !12, i64 12}
!29 = !{!14, !6, i64 0}
!30 = !{!31, !12, i64 8}
!31 = !{!"_ZTS8segments", !6, i64 0, !12, i64 8}
!32 = !{!31, !6, i64 0}
!33 = !{!16, !7, i64 4}
!34 = !{!16, !12, i64 0}
!35 = !{!27, !27, i64 0}
!36 = !{!16, !6, i64 8}
!37 = !{!38, !10, i64 16}
!38 = !{!"_ZTS5voxel", !6, i64 0, !26, i64 8, !26, i64 10, !26, i64 12, !10, 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 = distinct !{!48, !40}
!49 = distinct !{!49, !40}
!50 = distinct !{!50, !40}
!51 = distinct !{!51, !40}
!52 = distinct !{!52, !40}
!53 = distinct !{!53, !40}
!54 = distinct !{!54, !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"

%"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.std::vector.31" = type { %"struct.std::_Vector_base.32" }
%"struct.std::_Vector_base.32" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.33" = type { i8 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%class.segment = type { i32, i8, ptr }
%class.voxel = type <{ ptr, i16, i16, i16, [2 x i8], float, [4 x i8] }>

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.15 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 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 nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13medialSurface12smoothRadiusEv(ptr noundef nonnull align 8 dereferenceable(252) %0) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector.31", align 8
  %3 = alloca float, align 4
  %4 = alloca %"class.std::allocator.33", align 1
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca float, align 4
  %27 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %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.15)
  %30 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #6
  %31 = getelementptr inbounds i8, ptr %0, i64 64
  %32 = tail call noundef i64 @_ZNKSt6vectorI5voxelSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #6
  store float 0.000000e+00, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKfRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %32, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 1 dereferenceable(1) %4)
          to label %33 unwind label %51

33:                                               ; preds = %1
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  %34 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.16)
          to label %35 unwind label %53

35:                                               ; preds = %33
  %36 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %.preheader156 unwind label %53

.preheader156:                                    ; preds = %35
  %37 = getelementptr inbounds i8, ptr %0, i64 16
  %38 = load i32, ptr %37, align 8, !tbaa !9
  %39 = icmp sgt i32 %38, 0
  br i1 %39, label %.preheader155.lr.ph, label %._crit_edge196

.preheader155.lr.ph:                              ; preds = %.preheader156
  %40 = getelementptr inbounds i8, ptr %0, i64 12
  %41 = load i32, ptr %40, align 4, !tbaa !26
  %42 = icmp sgt i32 %41, 0
  br i1 %42, label %.preheader155, label %._crit_edge196

.preheader155:                                    ; preds = %.preheader155.lr.ph, %._crit_edge194
  %43 = phi i32 [ %55, %._crit_edge194 ], [ %38, %.preheader155.lr.ph ]
  %44 = phi i32 [ %56, %._crit_edge194 ], [ %41, %.preheader155.lr.ph ]
  %indvars.iv246 = phi i64 [ %indvars.iv.next247, %._crit_edge194 ], [ 0, %.preheader155.lr.ph ]
  %45 = icmp sgt i32 %44, 0
  br i1 %45, label %.lr.ph193, label %._crit_edge194

.lr.ph193:                                        ; preds = %.preheader155
  %46 = trunc i64 %indvars.iv246 to i32
  %47 = add i32 %46, -1
  %48 = trunc i64 %indvars.iv246 to i32
  %49 = add i32 %48, 2
  br label %59

._crit_edge196:                                   ; preds = %._crit_edge194, %.preheader155.lr.ph, %.preheader156
  %50 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.16)
          to label %199 unwind label %53

51:                                               ; preds = %1
  %52 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  br label %375

53:                                               ; preds = %352, %._crit_edge233, %199, %._crit_edge196, %35, %33
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %374

._crit_edge194.loopexit:                          ; preds = %._crit_edge191
  %.pre261 = load i32, ptr %37, align 8, !tbaa !9
  br label %._crit_edge194

._crit_edge194:                                   ; preds = %._crit_edge194.loopexit, %.preheader155
  %55 = phi i32 [ %.pre261, %._crit_edge194.loopexit ], [ %43, %.preheader155 ]
  %56 = phi i32 [ %71, %._crit_edge194.loopexit ], [ %44, %.preheader155 ]
  %indvars.iv.next247 = add nuw nsw i64 %indvars.iv246, 1
  %57 = sext i32 %55 to i64
  %58 = icmp slt i64 %indvars.iv.next247, %57
  br i1 %58, label %.preheader155, label %._crit_edge196, !llvm.loop !27

59:                                               ; preds = %.lr.ph193, %._crit_edge191
  %indvars.iv243 = phi i64 [ 0, %.lr.ph193 ], [ %indvars.iv.next244, %._crit_edge191 ]
  %60 = load ptr, ptr %0, align 8, !tbaa !30
  %61 = getelementptr inbounds i8, ptr %60, i64 248
  %62 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_I8segmentsSaIS0_EESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %61, i64 noundef %indvars.iv246) #6
  %63 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNKSt6vectorI8segmentsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef %indvars.iv243) #6
  %64 = getelementptr inbounds i8, ptr %63, i64 8
  %65 = load i32, ptr %64, align 8, !tbaa !31
  %66 = icmp sgt i32 %65, 0
  br i1 %66, label %.lr.ph190, label %._crit_edge191

.lr.ph190:                                        ; preds = %59
  %.pre = load ptr, ptr %63, align 8, !tbaa !33
  %67 = trunc i64 %indvars.iv243 to i32
  %68 = add i32 %67, -1
  %69 = trunc i64 %indvars.iv243 to i32
  %70 = add i32 %69, 2
  br label %74

._crit_edge191:                                   ; preds = %.loopexit154, %59
  %indvars.iv.next244 = add nuw nsw i64 %indvars.iv243, 1
  %71 = load i32, ptr %40, align 4, !tbaa !26
  %72 = sext i32 %71 to i64
  %73 = icmp slt i64 %indvars.iv.next244, %72
  br i1 %73, label %59, label %._crit_edge194.loopexit, !llvm.loop !34

74:                                               ; preds = %.lr.ph190, %.loopexit154
  %75 = phi i32 [ %65, %.lr.ph190 ], [ %194, %.loopexit154 ]
  %76 = phi ptr [ %.pre, %.lr.ph190 ], [ %195, %.loopexit154 ]
  %77 = phi ptr [ %.pre, %.lr.ph190 ], [ %196, %.loopexit154 ]
  %indvars.iv = phi i64 [ 0, %.lr.ph190 ], [ %indvars.iv.next, %.loopexit154 ]
  %78 = getelementptr inbounds %class.segment, ptr %77, i64 %indvars.iv
  %79 = getelementptr inbounds i8, ptr %78, i64 4
  %80 = load i8, ptr %79, align 4, !tbaa !35
  %81 = icmp eq i8 %80, 0
  br i1 %81, label %82, label %.loopexit154

82:                                               ; preds = %74
  %83 = load i32, ptr %78, align 8, !tbaa !36
  %84 = getelementptr inbounds %class.segment, ptr %76, i64 %indvars.iv
  %85 = getelementptr inbounds i8, ptr %84, i64 16
  %86 = load i32, ptr %85, align 8, !tbaa !36
  %87 = icmp slt i32 %83, %86
  br i1 %87, label %.lr.ph187, label %.loopexit154

.lr.ph187:                                        ; preds = %82
  %88 = getelementptr inbounds i8, ptr %78, i64 8
  br label %89

89:                                               ; preds = %.lr.ph187, %._crit_edge182
  %.0145185 = phi i32 [ %83, %.lr.ph187 ], [ %118, %._crit_edge182 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  store i32 %47, ptr %5, align 4, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #6
  store i32 0, ptr %6, align 4, !tbaa !37
  %90 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %91 = load i32, ptr %90, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  store i32 %49, ptr %7, align 4, !tbaa !37
  %92 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %37)
  %93 = load i32, ptr %92, align 4, !tbaa !37
  %94 = icmp slt i32 %91, %93
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  br i1 %94, label %.lr.ph181, label %._crit_edge182

.lr.ph181:                                        ; preds = %89
  %95 = add nsw i32 %.0145185, -1
  %96 = add nsw i32 %.0145185, 2
  br label %124

._crit_edge182:                                   ; preds = %._crit_edge, %89
  %.0141.lcssa = phi double [ 0.000000e+00, %89 ], [ %.1142.lcssa, %._crit_edge ]
  %.0137.lcssa = phi i32 [ 0, %89 ], [ %.1138.lcssa, %._crit_edge ]
  %97 = fmul double %.0141.lcssa, 4.000000e+00
  %98 = mul nsw i32 %.0137.lcssa, 3
  %99 = add nsw i32 %98, 27
  %100 = sitofp i32 %99 to double
  %101 = fdiv double %97, %100
  %102 = load ptr, ptr %88, align 8, !tbaa !38
  %103 = load i32, ptr %78, align 8, !tbaa !36
  %104 = sub nsw i32 %.0145185, %103
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds %class.voxel, ptr %102, i64 %105
  %107 = getelementptr inbounds i8, ptr %106, i64 16
  %108 = load float, ptr %107, align 8, !tbaa !39
  %109 = fpext float %108 to double
  %110 = fsub double %101, %109
  %111 = fptrunc double %110 to float
  %112 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNSt6vectorI5voxelSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef 0) #6
  %113 = ptrtoint ptr %106 to i64
  %114 = ptrtoint ptr %112 to i64
  %115 = sub i64 %113, %114
  %116 = sdiv exact i64 %115, 24
  %117 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %116) #6
  store float %111, ptr %117, align 4, !tbaa !5
  %118 = add nsw i32 %.0145185, 1
  %119 = load ptr, ptr %63, align 8, !tbaa !33
  %120 = getelementptr inbounds %class.segment, ptr %119, i64 %indvars.iv
  %121 = getelementptr inbounds i8, ptr %120, i64 16
  %122 = load i32, ptr %121, align 8, !tbaa !36
  %123 = icmp slt i32 %118, %122
  br i1 %123, label %89, label %.loopexit154.loopexit, !llvm.loop !41

124:                                              ; preds = %.lr.ph181, %._crit_edge
  %.0136179 = phi i32 [ %91, %.lr.ph181 ], [ %130, %._crit_edge ]
  %.0137178 = phi i32 [ 0, %.lr.ph181 ], [ %.1138.lcssa, %._crit_edge ]
  %.0141177 = phi double [ 0.000000e+00, %.lr.ph181 ], [ %.1142.lcssa, %._crit_edge ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  store i32 %68, ptr %8, align 4, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #6
  store i32 0, ptr %9, align 4, !tbaa !37
  %125 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %126 = load i32, ptr %125, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #6
  store i32 %70, ptr %10, align 4, !tbaa !37
  %127 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %40)
  %128 = load i32, ptr %127, align 4, !tbaa !37
  %129 = icmp slt i32 %126, %128
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #6
  br i1 %129, label %.lr.ph174, label %._crit_edge

._crit_edge:                                      ; preds = %.loopexit153, %124
  %.1142.lcssa = phi double [ %.0141177, %124 ], [ %.3144, %.loopexit153 ]
  %.1138.lcssa = phi i32 [ %.0137178, %124 ], [ %.3140, %.loopexit153 ]
  %130 = add nsw i32 %.0136179, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  store i32 %49, ptr %7, align 4, !tbaa !37
  %131 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %37)
  %132 = load i32, ptr %131, align 4, !tbaa !37
  %133 = icmp slt i32 %130, %132
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  br i1 %133, label %124, label %._crit_edge182, !llvm.loop !42

.lr.ph174:                                        ; preds = %124, %.loopexit153
  %.0135173 = phi i32 [ %190, %.loopexit153 ], [ %126, %124 ]
  %.1138172 = phi i32 [ %.3140, %.loopexit153 ], [ %.0137178, %124 ]
  %.1142171 = phi double [ %.3144, %.loopexit153 ], [ %.0141177, %124 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #6
  store i32 %95, ptr %11, align 4, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #6
  store i32 0, ptr %12, align 4, !tbaa !37
  %134 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12)
  %135 = load i32, ptr %134, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #6
  %136 = load ptr, ptr %0, align 8, !tbaa !30
  %137 = invoke noundef ptr @_ZNK11inputDataNE6segptrEiii(ptr noundef nonnull align 8 dereferenceable(448) %136, i32 noundef %135, i32 noundef %.0135173, i32 noundef %.0136179)
          to label %138 unwind label %148

138:                                              ; preds = %.lr.ph174
  %139 = getelementptr inbounds i8, ptr %137, i64 4
  %140 = load i8, ptr %139, align 4, !tbaa !35
  %.not150 = icmp eq i8 %140, 0
  br i1 %.not150, label %150, label %141

141:                                              ; preds = %138
  %142 = getelementptr inbounds i8, ptr %137, i64 20
  %143 = load i8, ptr %142, align 4, !tbaa !35
  %144 = icmp eq i8 %143, 0
  br i1 %144, label %145, label %.loopexit153

145:                                              ; preds = %141
  %146 = getelementptr inbounds i8, ptr %137, i64 16
  %147 = load i32, ptr %146, align 8, !tbaa !36
  br label %150

148:                                              ; preds = %.lr.ph174
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %374

150:                                              ; preds = %145, %138
  %.0133.ph = phi i32 [ %135, %138 ], [ %147, %145 ]
  %.0132.ph = phi ptr [ %137, %138 ], [ %146, %145 ]
  %151 = getelementptr inbounds i8, ptr %.0132.ph, i64 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #6
  store i32 %96, ptr %13, align 4, !tbaa !37
  %152 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %151, ptr noundef nonnull align 4 dereferenceable(4) %13)
  %153 = load i32, ptr %152, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #6
  %154 = icmp slt i32 %.0133.ph, %153
  br i1 %154, label %.lr.ph.preheader, label %.loopexit153

.lr.ph.preheader:                                 ; preds = %150
  %155 = getelementptr inbounds i8, ptr %.0132.ph, i64 8
  %156 = load ptr, ptr %155, align 8, !tbaa !38
  %157 = load i32, ptr %.0132.ph, align 8, !tbaa !36
  %158 = sub nsw i32 %.0133.ph, %157
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds %class.voxel, ptr %156, i64 %159
  %161 = add i32 %.1138172, %153
  %162 = sub i32 %153, %.0133.ph
  %xtraiter = and i32 %162, 3
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader, %.lr.ph.prol
  %.0131169.prol = phi ptr [ %167, %.lr.ph.prol ], [ %160, %.lr.ph.preheader ]
  %.1134168.prol = phi i32 [ %168, %.lr.ph.prol ], [ %.0133.ph, %.lr.ph.preheader ]
  %.2143166.prol = phi double [ %166, %.lr.ph.prol ], [ %.1142171, %.lr.ph.preheader ]
  %prol.iter = phi i32 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader ]
  %163 = getelementptr inbounds i8, ptr %.0131169.prol, i64 16
  %164 = load float, ptr %163, align 8, !tbaa !39
  %165 = fpext float %164 to double
  %166 = fadd double %.2143166.prol, %165
  %167 = getelementptr inbounds i8, ptr %.0131169.prol, i64 24
  %168 = add nsw i32 %.1134168.prol, 1
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !43

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader
  %.lcssa289.unr = phi double [ poison, %.lr.ph.preheader ], [ %166, %.lr.ph.prol ]
  %.0131169.unr = phi ptr [ %160, %.lr.ph.preheader ], [ %167, %.lr.ph.prol ]
  %.1134168.unr = phi i32 [ %.0133.ph, %.lr.ph.preheader ], [ %168, %.lr.ph.prol ]
  %.2143166.unr = phi double [ %.1142171, %.lr.ph.preheader ], [ %166, %.lr.ph.prol ]
  %169 = sub i32 %.0133.ph, %153
  %170 = icmp ugt i32 %169, -4
  br i1 %170, label %.loopexit153.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %.0131169 = phi ptr [ %187, %.lr.ph ], [ %.0131169.unr, %.lr.ph.prol.loopexit ]
  %.1134168 = phi i32 [ %188, %.lr.ph ], [ %.1134168.unr, %.lr.ph.prol.loopexit ]
  %.2143166 = phi double [ %186, %.lr.ph ], [ %.2143166.unr, %.lr.ph.prol.loopexit ]
  %171 = getelementptr inbounds i8, ptr %.0131169, i64 16
  %172 = load float, ptr %171, align 8, !tbaa !39
  %173 = fpext float %172 to double
  %174 = fadd double %.2143166, %173
  %175 = getelementptr inbounds i8, ptr %.0131169, i64 40
  %176 = load float, ptr %175, align 8, !tbaa !39
  %177 = fpext float %176 to double
  %178 = fadd double %174, %177
  %179 = getelementptr inbounds i8, ptr %.0131169, i64 64
  %180 = load float, ptr %179, align 8, !tbaa !39
  %181 = fpext float %180 to double
  %182 = fadd double %178, %181
  %183 = getelementptr inbounds i8, ptr %.0131169, i64 88
  %184 = load float, ptr %183, align 8, !tbaa !39
  %185 = fpext float %184 to double
  %186 = fadd double %182, %185
  %187 = getelementptr inbounds i8, ptr %.0131169, i64 96
  %188 = add nsw i32 %.1134168, 4
  %exitcond.not.3 = icmp eq i32 %188, %153
  br i1 %exitcond.not.3, label %.loopexit153.loopexit, label %.lr.ph, !llvm.loop !45

.loopexit153.loopexit:                            ; preds = %.lr.ph, %.lr.ph.prol.loopexit
  %.lcssa289 = phi double [ %.lcssa289.unr, %.lr.ph.prol.loopexit ], [ %186, %.lr.ph ]
  %189 = sub i32 %161, %.0133.ph
  br label %.loopexit153

.loopexit153:                                     ; preds = %141, %.loopexit153.loopexit, %150
  %.3144 = phi double [ %.1142171, %150 ], [ %.lcssa289, %.loopexit153.loopexit ], [ %.1142171, %141 ]
  %.3140 = phi i32 [ %.1138172, %150 ], [ %189, %.loopexit153.loopexit ], [ %.1138172, %141 ]
  %190 = add nsw i32 %.0135173, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #6
  store i32 %70, ptr %10, align 4, !tbaa !37
  %191 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %40)
  %192 = load i32, ptr %191, align 4, !tbaa !37
  %193 = icmp slt i32 %190, %192
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #6
  br i1 %193, label %.lr.ph174, label %._crit_edge, !llvm.loop !46

.loopexit154.loopexit:                            ; preds = %._crit_edge182
  %.pre260 = load i32, ptr %64, align 8, !tbaa !31
  br label %.loopexit154

.loopexit154:                                     ; preds = %.loopexit154.loopexit, %82, %74
  %194 = phi i32 [ %.pre260, %.loopexit154.loopexit ], [ %75, %82 ], [ %75, %74 ]
  %195 = phi ptr [ %119, %.loopexit154.loopexit ], [ %76, %82 ], [ %76, %74 ]
  %196 = phi ptr [ %119, %.loopexit154.loopexit ], [ %76, %82 ], [ %77, %74 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %197 = sext i32 %194 to i64
  %198 = icmp slt i64 %indvars.iv.next, %197
  br i1 %198, label %74, label %._crit_edge191, !llvm.loop !47

199:                                              ; preds = %._crit_edge196
  %200 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %.preheader152 unwind label %53

.preheader152:                                    ; preds = %199
  %201 = load i32, ptr %37, align 8, !tbaa !9
  %202 = icmp sgt i32 %201, 0
  br i1 %202, label %.preheader.lr.ph, label %._crit_edge233

.preheader.lr.ph:                                 ; preds = %.preheader152
  %203 = getelementptr inbounds i8, ptr %0, i64 12
  %204 = load i32, ptr %203, align 4, !tbaa !26
  %205 = icmp sgt i32 %204, 0
  br i1 %205, label %.preheader, label %._crit_edge233

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge231
  %206 = phi i32 [ %214, %._crit_edge231 ], [ %201, %.preheader.lr.ph ]
  %207 = phi i32 [ %215, %._crit_edge231 ], [ %204, %.preheader.lr.ph ]
  %indvars.iv256 = phi i64 [ %indvars.iv.next257, %._crit_edge231 ], [ 0, %.preheader.lr.ph ]
  %208 = icmp sgt i32 %207, 0
  br i1 %208, label %.lr.ph230, label %._crit_edge231

.lr.ph230:                                        ; preds = %.preheader
  %209 = trunc i64 %indvars.iv256 to i32
  %210 = add i32 %209, -1
  %211 = trunc i64 %indvars.iv256 to i32
  %212 = add i32 %211, 2
  br label %218

._crit_edge233:                                   ; preds = %._crit_edge231, %.preheader.lr.ph, %.preheader152
  %213 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.16)
          to label %352 unwind label %53

._crit_edge231.loopexit:                          ; preds = %._crit_edge228
  %.pre266 = load i32, ptr %37, align 8, !tbaa !9
  br label %._crit_edge231

._crit_edge231:                                   ; preds = %._crit_edge231.loopexit, %.preheader
  %214 = phi i32 [ %.pre266, %._crit_edge231.loopexit ], [ %206, %.preheader ]
  %215 = phi i32 [ %230, %._crit_edge231.loopexit ], [ %207, %.preheader ]
  %indvars.iv.next257 = add nuw nsw i64 %indvars.iv256, 1
  %216 = sext i32 %214 to i64
  %217 = icmp slt i64 %indvars.iv.next257, %216
  br i1 %217, label %.preheader, label %._crit_edge233, !llvm.loop !48

218:                                              ; preds = %.lr.ph230, %._crit_edge228
  %indvars.iv253 = phi i64 [ 0, %.lr.ph230 ], [ %indvars.iv.next254, %._crit_edge228 ]
  %219 = load ptr, ptr %0, align 8, !tbaa !30
  %220 = getelementptr inbounds i8, ptr %219, i64 248
  %221 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_I8segmentsSaIS0_EESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %220, i64 noundef %indvars.iv256) #6
  %222 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNKSt6vectorI8segmentsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %221, i64 noundef %indvars.iv253) #6
  %223 = getelementptr inbounds i8, ptr %222, i64 8
  %224 = load i32, ptr %223, align 8, !tbaa !31
  %225 = icmp sgt i32 %224, 0
  br i1 %225, label %.lr.ph227, label %._crit_edge228

.lr.ph227:                                        ; preds = %218
  %.pre262 = load ptr, ptr %222, align 8, !tbaa !33
  %226 = trunc i64 %indvars.iv253 to i32
  %227 = add i32 %226, -1
  %228 = trunc i64 %indvars.iv253 to i32
  %229 = add i32 %228, 2
  br label %233

._crit_edge228:                                   ; preds = %.loopexit151, %218
  %indvars.iv.next254 = add nuw nsw i64 %indvars.iv253, 1
  %230 = load i32, ptr %203, align 4, !tbaa !26
  %231 = sext i32 %230 to i64
  %232 = icmp slt i64 %indvars.iv.next254, %231
  br i1 %232, label %218, label %._crit_edge231.loopexit, !llvm.loop !49

233:                                              ; preds = %.lr.ph227, %.loopexit151
  %234 = phi i32 [ %224, %.lr.ph227 ], [ %347, %.loopexit151 ]
  %235 = phi ptr [ %.pre262, %.lr.ph227 ], [ %348, %.loopexit151 ]
  %236 = phi ptr [ %.pre262, %.lr.ph227 ], [ %349, %.loopexit151 ]
  %indvars.iv250 = phi i64 [ 0, %.lr.ph227 ], [ %indvars.iv.next251, %.loopexit151 ]
  %237 = getelementptr inbounds %class.segment, ptr %236, i64 %indvars.iv250
  %238 = getelementptr inbounds i8, ptr %237, i64 4
  %239 = load i8, ptr %238, align 4, !tbaa !35
  %240 = icmp eq i8 %239, 0
  br i1 %240, label %241, label %.loopexit151

241:                                              ; preds = %233
  %242 = load i32, ptr %237, align 8, !tbaa !36
  %243 = getelementptr inbounds %class.segment, ptr %235, i64 %indvars.iv250
  %244 = getelementptr inbounds i8, ptr %243, i64 16
  %245 = load i32, ptr %244, align 8, !tbaa !36
  %246 = icmp slt i32 %242, %245
  br i1 %246, label %.lr.ph224, label %.loopexit151

.lr.ph224:                                        ; preds = %241
  %247 = getelementptr inbounds i8, ptr %237, i64 8
  br label %248

248:                                              ; preds = %.lr.ph224, %._crit_edge219
  %.0124222 = phi i32 [ %242, %.lr.ph224 ], [ %287, %._crit_edge219 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #6
  store i32 %210, ptr %14, align 4, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #6
  store i32 0, ptr %15, align 4, !tbaa !37
  %249 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15)
  %250 = load i32, ptr %249, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #6
  store i32 %212, ptr %16, align 4, !tbaa !37
  %251 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %37)
  %252 = load i32, ptr %251, align 4, !tbaa !37
  %253 = icmp slt i32 %250, %252
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #6
  br i1 %253, label %.lr.ph218, label %._crit_edge219

.lr.ph218:                                        ; preds = %248
  %254 = add nsw i32 %.0124222, -1
  %255 = add nsw i32 %.0124222, 2
  br label %293

._crit_edge219:                                   ; preds = %._crit_edge211, %248
  %.0120.lcssa = phi double [ 0.000000e+00, %248 ], [ %.1121.lcssa, %._crit_edge211 ]
  %.0118.lcssa = phi i32 [ 0, %248 ], [ %.1119.lcssa, %._crit_edge211 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  %256 = load ptr, ptr %247, align 8, !tbaa !38
  %257 = load i32, ptr %237, align 8, !tbaa !36
  %258 = sub nsw i32 %.0124222, %257
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds %class.voxel, ptr %256, i64 %259
  %261 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNSt6vectorI5voxelSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef 0) #6
  %262 = ptrtoint ptr %260 to i64
  %263 = ptrtoint ptr %261 to i64
  %264 = sub i64 %262, %263
  %265 = sdiv exact i64 %264, 24
  %266 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %265) #6
  %267 = load float, ptr %266, align 4, !tbaa !5
  %268 = fpext float %267 to double
  %269 = fmul double %.0120.lcssa, 1.980000e+00
  %270 = add nsw i32 %.0118.lcssa, 27
  %271 = sitofp i32 %270 to double
  %272 = fdiv double %269, %271
  %273 = fsub double %268, %272
  %274 = fmul double %273, 2.000000e-02
  store double %274, ptr %23, align 8, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  store double -5.000000e-03, ptr %24, align 8, !tbaa !50
  %275 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #6
  store double 1.000000e-02, ptr %25, align 8, !tbaa !50
  %276 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %275, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %277 = load double, ptr %276, align 8, !tbaa !50
  %278 = load ptr, ptr %247, align 8, !tbaa !38
  %279 = load i32, ptr %237, align 8, !tbaa !36
  %280 = sub nsw i32 %.0124222, %279
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds %class.voxel, ptr %278, i64 %281, i32 5
  %283 = load float, ptr %282, align 8, !tbaa !39
  %284 = fpext float %283 to double
  %285 = fadd double %277, %284
  %286 = fptrunc double %285 to float
  store float %286, ptr %282, align 8, !tbaa !39
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  %287 = add nsw i32 %.0124222, 1
  %288 = load ptr, ptr %222, align 8, !tbaa !33
  %289 = getelementptr inbounds %class.segment, ptr %288, i64 %indvars.iv250
  %290 = getelementptr inbounds i8, ptr %289, i64 16
  %291 = load i32, ptr %290, align 8, !tbaa !36
  %292 = icmp slt i32 %287, %291
  br i1 %292, label %248, label %.loopexit151.loopexit, !llvm.loop !51

293:                                              ; preds = %.lr.ph218, %._crit_edge211
  %.0117216 = phi i32 [ %250, %.lr.ph218 ], [ %299, %._crit_edge211 ]
  %.0118215 = phi i32 [ 0, %.lr.ph218 ], [ %.1119.lcssa, %._crit_edge211 ]
  %.0120214 = phi double [ 0.000000e+00, %.lr.ph218 ], [ %.1121.lcssa, %._crit_edge211 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #6
  store i32 %227, ptr %17, align 4, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #6
  store i32 0, ptr %18, align 4, !tbaa !37
  %294 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18)
  %295 = load i32, ptr %294, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #6
  store i32 %229, ptr %19, align 4, !tbaa !37
  %296 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 4 dereferenceable(4) %203)
  %297 = load i32, ptr %296, align 4, !tbaa !37
  %298 = icmp slt i32 %295, %297
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #6
  br i1 %298, label %.lr.ph210, label %._crit_edge211

._crit_edge211:                                   ; preds = %.loopexit, %293
  %.1121.lcssa = phi double [ %.0120214, %293 ], [ %.3123, %.loopexit ]
  %.1119.lcssa = phi i32 [ %.0118215, %293 ], [ %.3, %.loopexit ]
  %299 = add nsw i32 %.0117216, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #6
  store i32 %212, ptr %16, align 4, !tbaa !37
  %300 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %37)
  %301 = load i32, ptr %300, align 4, !tbaa !37
  %302 = icmp slt i32 %299, %301
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #6
  br i1 %302, label %293, label %._crit_edge219, !llvm.loop !52

.lr.ph210:                                        ; preds = %293, %.loopexit
  %.0116208 = phi i32 [ %343, %.loopexit ], [ %295, %293 ]
  %.1119207 = phi i32 [ %.3, %.loopexit ], [ %.0118215, %293 ]
  %.1121206 = phi double [ %.3123, %.loopexit ], [ %.0120214, %293 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #6
  store i32 %254, ptr %20, align 4, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #6
  store i32 0, ptr %21, align 4, !tbaa !37
  %303 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %21)
  %304 = load i32, ptr %303, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  %305 = load ptr, ptr %0, align 8, !tbaa !30
  %306 = invoke noundef ptr @_ZNK11inputDataNE6segptrEiii(ptr noundef nonnull align 8 dereferenceable(448) %305, i32 noundef %304, i32 noundef %.0116208, i32 noundef %.0117216)
          to label %307 unwind label %317

307:                                              ; preds = %.lr.ph210
  %308 = getelementptr inbounds i8, ptr %306, i64 4
  %309 = load i8, ptr %308, align 4, !tbaa !35
  %.not = icmp eq i8 %309, 0
  br i1 %.not, label %319, label %310

310:                                              ; preds = %307
  %311 = getelementptr inbounds i8, ptr %306, i64 20
  %312 = load i8, ptr %311, align 4, !tbaa !35
  %313 = icmp eq i8 %312, 0
  br i1 %313, label %314, label %.loopexit

314:                                              ; preds = %310
  %315 = getelementptr inbounds i8, ptr %306, i64 16
  %316 = load i32, ptr %315, align 8, !tbaa !36
  br label %319

317:                                              ; preds = %.lr.ph210
  %318 = landingpad { ptr, i32 }
          cleanup
  br label %374

319:                                              ; preds = %314, %307
  %.0114.ph = phi i32 [ %304, %307 ], [ %316, %314 ]
  %.0113.ph = phi ptr [ %306, %307 ], [ %315, %314 ]
  %320 = getelementptr inbounds i8, ptr %.0113.ph, i64 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #6
  store i32 %255, ptr %22, align 4, !tbaa !37
  %321 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %320, ptr noundef nonnull align 4 dereferenceable(4) %22)
  %322 = load i32, ptr %321, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  %323 = icmp slt i32 %.0114.ph, %322
  br i1 %323, label %.lr.ph203.preheader, label %.loopexit

.lr.ph203.preheader:                              ; preds = %319
  %324 = getelementptr inbounds i8, ptr %.0113.ph, i64 8
  %325 = load ptr, ptr %324, align 8, !tbaa !38
  %326 = load i32, ptr %.0113.ph, align 8, !tbaa !36
  %327 = sub nsw i32 %.0114.ph, %326
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds %class.voxel, ptr %325, i64 %328
  %330 = add i32 %.1119207, %322
  br label %.lr.ph203

.lr.ph203:                                        ; preds = %.lr.ph203.preheader, %.lr.ph203
  %.0201 = phi ptr [ %340, %.lr.ph203 ], [ %329, %.lr.ph203.preheader ]
  %.1115200 = phi i32 [ %341, %.lr.ph203 ], [ %.0114.ph, %.lr.ph203.preheader ]
  %.2122198 = phi double [ %339, %.lr.ph203 ], [ %.1121206, %.lr.ph203.preheader ]
  %331 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNSt6vectorI5voxelSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef 0) #6
  %332 = ptrtoint ptr %.0201 to i64
  %333 = ptrtoint ptr %331 to i64
  %334 = sub i64 %332, %333
  %335 = sdiv exact i64 %334, 24
  %336 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %335) #6
  %337 = load float, ptr %336, align 4, !tbaa !5
  %338 = fpext float %337 to double
  %339 = fadd double %.2122198, %338
  %340 = getelementptr inbounds i8, ptr %.0201, i64 24
  %341 = add i32 %.1115200, 1
  %exitcond249.not = icmp eq i32 %341, %322
  br i1 %exitcond249.not, label %.loopexit.loopexit, label %.lr.ph203, !llvm.loop !53

.loopexit.loopexit:                               ; preds = %.lr.ph203
  %342 = sub i32 %330, %.0114.ph
  br label %.loopexit

.loopexit:                                        ; preds = %310, %.loopexit.loopexit, %319
  %.3123 = phi double [ %.1121206, %319 ], [ %339, %.loopexit.loopexit ], [ %.1121206, %310 ]
  %.3 = phi i32 [ %.1119207, %319 ], [ %342, %.loopexit.loopexit ], [ %.1119207, %310 ]
  %343 = add nsw i32 %.0116208, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #6
  store i32 %229, ptr %19, align 4, !tbaa !37
  %344 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 4 dereferenceable(4) %203)
  %345 = load i32, ptr %344, align 4, !tbaa !37
  %346 = icmp slt i32 %343, %345
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #6
  br i1 %346, label %.lr.ph210, label %._crit_edge211, !llvm.loop !54

.loopexit151.loopexit:                            ; preds = %._crit_edge219
  %.pre265 = load i32, ptr %223, align 8, !tbaa !31
  br label %.loopexit151

.loopexit151:                                     ; preds = %.loopexit151.loopexit, %241, %233
  %347 = phi i32 [ %.pre265, %.loopexit151.loopexit ], [ %234, %241 ], [ %234, %233 ]
  %348 = phi ptr [ %288, %.loopexit151.loopexit ], [ %235, %241 ], [ %235, %233 ]
  %349 = phi ptr [ %288, %.loopexit151.loopexit ], [ %235, %241 ], [ %236, %233 ]
  %indvars.iv.next251 = add nuw nsw i64 %indvars.iv250, 1
  %350 = sext i32 %347 to i64
  %351 = icmp slt i64 %indvars.iv.next251, %350
  br i1 %351, label %233, label %._crit_edge228, !llvm.loop !55

352:                                              ; preds = %._crit_edge233
  %353 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSo5flushEv(ptr noundef nonnull align 8 dereferenceable(8) %213)
          to label %354 unwind label %53

354:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #6
  store float 0.000000e+00, ptr %26, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  %355 = call ptr @_ZNSt6vectorI5voxelSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #6
  store ptr %355, ptr %27, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #6
  %356 = call ptr @_ZNSt6vectorI5voxelSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #6
  store ptr %356, ptr %28, align 8
  %357 = call noundef zeroext i1 @_ZN9__gnu_cxxltIP5voxelSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  br i1 %357, label %.lr.ph235, label %._crit_edge236

._crit_edge236:                                   ; preds = %.lr.ph235, %354
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  %358 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.17)
          to label %366 unwind label %372

.lr.ph235:                                        ; preds = %354, %.lr.ph235
  %359 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIP5voxelSt6vectorIS1_SaIS1_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #6
  %360 = getelementptr inbounds i8, ptr %359, i64 16
  %361 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %26, ptr noundef nonnull align 4 dereferenceable(4) %360)
  %362 = load float, ptr %361, align 4, !tbaa !5
  store float %362, ptr %26, align 4, !tbaa !5
  %363 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP5voxelSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #6
  %364 = call ptr @_ZNSt6vectorI5voxelSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #6
  store ptr %364, ptr %28, align 8
  %365 = call noundef zeroext i1 @_ZN9__gnu_cxxltIP5voxelSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  br i1 %365, label %.lr.ph235, label %._crit_edge236, !llvm.loop !56

366:                                              ; preds = %._crit_edge236
  %367 = load float, ptr %26, align 4, !tbaa !5
  %368 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %358, float noundef %367)
          to label %369 unwind label %372

369:                                              ; preds = %366
  %370 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %368, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %371 unwind label %372

371:                                              ; preds = %369
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #6
  ret void

372:                                              ; preds = %369, %366, %._crit_edge236
  %373 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #6
  br label %374

374:                                              ; preds = %372, %317, %148, %53
  %.pn = phi { ptr, i32 } [ %149, %148 ], [ %318, %317 ], [ %373, %372 ], [ %54, %53 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #6
  br label %375

375:                                              ; preds = %374, %51
  %.pn.pn = phi { ptr, i32 } [ %.pn, %374 ], [ %52, %51 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #6
  resume { ptr, i32 } %.pn.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEEC2EmRKfRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxltIP5voxelSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIP5voxelSt6vectorIS1_SaIS1_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP5voxelSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint 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 #2 = { 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 #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 = { "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 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 #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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 16}
!10 = !{!"_ZTS13medialSurface", !11, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !13, i64 24, !13, i64 32, !11, i64 40, !14, i64 48, !15, i64 64, !19, i64 88, !23, i64 112, !6, i64 176, !25, i64 184, !25, i64 192, !25, i64 200, !25, i64 208, !25, i64 216, !25, i64 224, !12, i64 232, !25, i64 240, !6, i64 248}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTS7segment", !12, i64 0, !7, i64 4, !11, i64 8}
!15 = !{!"_ZTSSt6vectorI5voxelSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI5voxelSaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI5voxelSaIS0_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI5voxelSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!19 = !{!"_ZTSSt6vectorI10medialBallSaIS0_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseI10medialBallSaIS0_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseI10medialBallSaIS0_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseI10medialBallSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!23 = !{!"_ZTS10medialBall", !11, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !24, i64 20, !6, i64 24, !24, i64 28, !24, i64 30, !24, i64 32, !24, i64 34, !24, i64 36, !11, i64 40, !11, i64 48, !11, i64 56}
!24 = !{!"short", !7, i64 0}
!25 = !{!"double", !7, i64 0}
!26 = !{!10, !12, i64 12}
!27 = distinct !{!27, !28, !29}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!"llvm.loop.unswitch.partial.disable"}
!30 = !{!10, !11, i64 0}
!31 = !{!32, !12, i64 8}
!32 = !{!"_ZTS8segments", !11, i64 0, !12, i64 8}
!33 = !{!32, !11, i64 0}
!34 = distinct !{!34, !28}
!35 = !{!14, !7, i64 4}
!36 = !{!14, !12, i64 0}
!37 = !{!12, !12, i64 0}
!38 = !{!14, !11, i64 8}
!39 = !{!40, !6, i64 16}
!40 = !{!"_ZTS5voxel", !11, i64 0, !24, i64 8, !24, i64 10, !24, i64 12, !6, i64 16}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28}
!43 = distinct !{!43, !44}
!44 = !{!"llvm.loop.unroll.disable"}
!45 = distinct !{!45, !28}
!46 = distinct !{!46, !28}
!47 = distinct !{!47, !28}
!48 = distinct !{!48, !28, !29}
!49 = distinct !{!49, !28}
!50 = !{!25, !25, i64 0}
!51 = distinct !{!51, !28}
!52 = distinct !{!52, !28}
!53 = distinct !{!53, !28}
!54 = distinct !{!54, !28}
!55 = distinct !{!55, !28}
!56 = distinct !{!56, !28}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass