; LLVM IR from PRBonn/depth_clustering :: src/projections (projection_params)

; 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::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.12" }
%"struct.std::_Head_base.12" = type { ptr }
%"class.std::locale" = type { ptr }
%"class.depth_clustering::ProjectionParams" = type { %"class.depth_clustering::SpanParams", %"class.depth_clustering::SpanParams", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.5", %"class.std::vector.5", %"class.std::vector.5", %"class.std::vector.5" }
%"class.depth_clustering::SpanParams" = type { %"class.depth_clustering::Radians", %"class.depth_clustering::Radians", %"class.depth_clustering::Radians", %"class.depth_clustering::Radians", i32 }
%"class.depth_clustering::Radians" = type <{ float, i8, [3 x i8] }>
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<depth_clustering::Radians, std::allocator<depth_clustering::Radians>>::_Vector_impl" }
%"struct.std::_Vector_base<depth_clustering::Radians, std::allocator<depth_clustering::Radians>>::_Vector_impl" = type { %"struct.std::_Vector_base<depth_clustering::Radians, std::allocator<depth_clustering::Radians>>::_Vector_impl_data" }
%"struct.std::_Vector_base<depth_clustering::Radians, std::allocator<depth_clustering::Radians>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = 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::basic_ifstream" = type { %"class.std::basic_istream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon.13 }
%union.anon.13 = type { i32 }
%"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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.17 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.17 = type { i64, [8 x i8] }
%"class.std::vector.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.boost::algorithm::detail::is_any_ofF" = type { %union.anon.23, i64 }
%union.anon.23 = type { ptr, [8 x i8] }

@stderr = external global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [53 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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16depth_clustering10SpanParamsC2ERKNS_7RadiansES3_i(ptr noundef nonnull align 4 dereferenceable(36), ptr noundef nonnull align 4 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(5), i32 noundef) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16depth_clustering16ProjectionParams10FillCosSinEv(ptr noundef nonnull align 8 dereferenceable(216)) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN16depth_clustering16ProjectionParams5validEv(ptr noundef nonnull align 8 dereferenceable(216)) #3 align 2

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16depth_clustering16ProjectionParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(216)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16depth_clustering9mem_utils11make_uniqueINS_16ProjectionParamsEJRS2_EEESt10unique_ptrIT_St14default_deleteIS5_EEDpOT0_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8, ptr noundef nonnull align 8 dereferenceable(216)) #3

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16depth_clustering16ProjectionParams14FromConfigFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %1) #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::locale", align 8
  %6 = alloca %"class.std::locale", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.depth_clustering::ProjectionParams", align 8
  %10 = alloca %"class.std::basic_ifstream", align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::vector.18", align 8
  %14 = alloca %"struct.boost::algorithm::detail::is_any_ofF", align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %"class.depth_clustering::SpanParams", align 4
  %18 = alloca %"class.depth_clustering::Radians", align 4
  %19 = alloca %"class.depth_clustering::Radians", align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.depth_clustering::Radians", align 4
  %22 = alloca %"class.depth_clustering::Radians", align 4
  %23 = alloca float, align 4
  %24 = alloca %"class.depth_clustering::SpanParams", align 4
  %25 = alloca %"class.depth_clustering::Radians", align 4
  %26 = alloca %"class.depth_clustering::Radians", align 4
  %27 = alloca i64, align 8
  %28 = alloca %"class.depth_clustering::Radians", align 4
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %29 = load ptr, ptr @stderr, align 8, !tbaa !5
  %30 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %29, ptr noundef @.str.5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  call void @_ZNSt6localeC1EPKc(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef @.str.6)
  invoke void @_ZNSt6locale6globalERKS_(ptr dead_on_unwind writable sret(%"class.std::locale") align 8 %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %31 unwind label %44

31:                                               ; preds = %2
  call void @_ZNSt6localeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  call void @_ZNSt6localeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  %32 = load ptr, ptr @stderr, align 8, !tbaa !5
  %33 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %32, ptr noundef @.str.7) #7
  call void @llvm.lifetime.start.p0(i64 216, ptr %9) #7
  call void @_ZN16depth_clustering16ProjectionParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(216) %9)
  call void @llvm.lifetime.start.p0(i64 520, ptr %10) #7
  %34 = load ptr, ptr %4, align 8, !tbaa !5
  %35 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %10, ptr noundef %35, i32 noundef 8)
          to label %36 unwind label %48

36:                                               ; preds = %31
  %37 = invoke noundef zeroext i1 @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv(ptr noundef nonnull align 8 dereferenceable(256) %10)
          to label %38 unwind label %52

38:                                               ; preds = %36
  br i1 %37, label %56, label %39

39:                                               ; preds = %38
  %40 = load ptr, ptr @stderr, align 8, !tbaa !5
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  %43 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %40, ptr noundef @.str.8, ptr noundef %42) #7
  call void @_ZNSt10unique_ptrIN16depth_clustering16ProjectionParamsESt14default_deleteIS1_EEC2IS3_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr null) #7
  store i32 1, ptr %11, align 4
  br label %286

44:                                               ; preds = %2
  %45 = landingpad { ptr, i32 }
          cleanup
  %46 = extractvalue { ptr, i32 } %45, 0
  store ptr %46, ptr %7, align 8
  %47 = extractvalue { ptr, i32 } %45, 1
  store i32 %47, ptr %8, align 4
  call void @_ZNSt6localeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  br label %289

48:                                               ; preds = %31
  %49 = landingpad { ptr, i32 }
          cleanup
  %50 = extractvalue { ptr, i32 } %49, 0
  store ptr %50, ptr %7, align 8
  %51 = extractvalue { ptr, i32 } %49, 1
  store i32 %51, ptr %8, align 4
  br label %288

52:                                               ; preds = %278, %272, %271, %36
  %53 = landingpad { ptr, i32 }
          cleanup
  %54 = extractvalue { ptr, i32 } %53, 0
  store ptr %54, ptr %7, align 8
  %55 = extractvalue { ptr, i32 } %53, 1
  store i32 %55, ptr %8, align 4
  br label %287

56:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 32, ptr %12) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br label %57

57:                                               ; preds = %267, %56
  %58 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EES4_(ptr noundef nonnull align 8 dereferenceable(16) %10, ptr noundef nonnull align 8 dereferenceable(32) %12, i8 noundef signext 10)
          to label %59 unwind label %67

59:                                               ; preds = %57
  %60 = load ptr, ptr %58, align 8, !tbaa !9
  %61 = getelementptr i8, ptr %60, i64 -24
  %62 = load i64, ptr %61, align 8
  %63 = getelementptr inbounds i8, ptr %58, i64 %62
  %64 = invoke noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEEcvbEv(ptr noundef nonnull align 8 dereferenceable(264) %63)
          to label %65 unwind label %67

65:                                               ; preds = %59
  br i1 %64, label %71, label %66

66:                                               ; preds = %65
  store i32 2, ptr %11, align 4
  br label %268

67:                                               ; preds = %71, %59, %57
  %68 = landingpad { ptr, i32 }
          cleanup
  %69 = extractvalue { ptr, i32 } %68, 0
  store ptr %69, ptr %7, align 8
  %70 = extractvalue { ptr, i32 } %68, 1
  store i32 %70, ptr %8, align 4
  br label %270

71:                                               ; preds = %65
  %72 = invoke noundef zeroext i1 @_ZN5boost9algorithm11starts_withINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEA2_cEEbRKT_RKT0_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 1 dereferenceable(2) @.str.9)
          to label %73 unwind label %67

73:                                               ; preds = %71
  br i1 %72, label %74, label %78

74:                                               ; preds = %73
  %75 = load ptr, ptr @stderr, align 8, !tbaa !5
  %76 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  %77 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %75, ptr noundef @.str.10, ptr noundef %76) #7
  br label %267

78:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #7
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  invoke void @_ZN5boost9algorithm9is_any_ofIA2_cEENS0_6detail10is_any_ofFINS_11range_valueIT_E4typeEEERKS6_(ptr dead_on_unwind writable sret(%"struct.boost::algorithm::detail::is_any_ofF") align 8 %14, ptr noundef nonnull align 1 dereferenceable(2) @.str.11)
          to label %79 unwind label %87

79:                                               ; preds = %78
  %80 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN5boost9algorithm5splitISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EERS8_NS0_6detail10is_any_ofFIcEEEERT_SG_OT0_T1_NS0_24token_compress_mode_typeE(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef %14, i32 noundef 1)
          to label %81 unwind label %91

81:                                               ; preds = %79
  call void @_ZN5boost9algorithm6detail10is_any_ofFIcED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #7
  %82 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  %83 = icmp ult i64 %82, 4
  br i1 %83, label %84, label %95

84:                                               ; preds = %81
  %85 = load ptr, ptr @stderr, align 8, !tbaa !5
  %86 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %85, ptr noundef @.str.12) #7
  call void @_ZNSt10unique_ptrIN16depth_clustering16ProjectionParamsESt14default_deleteIS1_EEC2IS3_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr null) #7
  store i32 1, ptr %11, align 4
  br label %261

87:                                               ; preds = %78
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %7, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %8, align 4
  br label %266

91:                                               ; preds = %79
  %92 = landingpad { ptr, i32 }
          cleanup
  %93 = extractvalue { ptr, i32 } %92, 0
  store ptr %93, ptr %7, align 8
  %94 = extractvalue { ptr, i32 } %92, 1
  store i32 %94, ptr %8, align 4
  call void @_ZN5boost9algorithm6detail10is_any_ofFIcED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #7
  br label %266

95:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %96 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #7
  %97 = invoke noundef i32 @_ZNSt7__cxx114stoiERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32) %96, ptr noundef null, i32 noundef 10)
          to label %98 unwind label %150

98:                                               ; preds = %95
  store i32 %97, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %99 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 1) #7
  %100 = invoke noundef i32 @_ZNSt7__cxx114stoiERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32) %99, ptr noundef null, i32 noundef 10)
          to label %101 unwind label %154

101:                                              ; preds = %98
  store i32 %100, ptr %16, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 36, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %102 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 2) #7
  %103 = invoke noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef null)
          to label %104 unwind label %158

104:                                              ; preds = %101
  %105 = fptrunc double %103 to float
  %106 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %105)
          to label %107 unwind label %158

107:                                              ; preds = %104
  %108 = trunc i64 %106 to i40
  store i40 %108, ptr %18, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %109 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 3) #7
  %110 = invoke noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef null)
          to label %111 unwind label %162

111:                                              ; preds = %107
  %112 = fptrunc double %110 to float
  %113 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %112)
          to label %114 unwind label %162

114:                                              ; preds = %111
  %115 = trunc i64 %113 to i40
  store i40 %115, ptr %19, align 4
  %116 = load i32, ptr %15, align 4, !tbaa !11
  invoke void @_ZN16depth_clustering10SpanParamsC2ERKNS_7RadiansES3_i(ptr noundef nonnull align 4 dereferenceable(36) %17, ptr noundef nonnull align 4 dereferenceable(5) %18, ptr noundef nonnull align 4 dereferenceable(5) %19, i32 noundef %116)
          to label %117 unwind label %162

117:                                              ; preds = %114
  %118 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %118, ptr align 4 %17, i64 36, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr %17) #7
  %119 = load ptr, ptr @stderr, align 8, !tbaa !5
  %120 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 1
  %121 = invoke noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams11start_angleEv(ptr noundef nonnull align 4 dereferenceable(36) %120)
          to label %122 unwind label %154

122:                                              ; preds = %117
  %123 = invoke noundef float @_ZNK16depth_clustering7Radians9ToDegreesEv(ptr noundef nonnull align 4 dereferenceable(5) %121)
          to label %124 unwind label %154

124:                                              ; preds = %122
  %125 = fpext float %123 to double
  %126 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 1
  %127 = invoke noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams9end_angleEv(ptr noundef nonnull align 4 dereferenceable(36) %126)
          to label %128 unwind label %154

128:                                              ; preds = %124
  %129 = invoke noundef float @_ZNK16depth_clustering7Radians9ToDegreesEv(ptr noundef nonnull align 4 dereferenceable(5) %127)
          to label %130 unwind label %154

130:                                              ; preds = %128
  %131 = fpext float %129 to double
  %132 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 1
  %133 = invoke noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams4spanEv(ptr noundef nonnull align 4 dereferenceable(36) %132)
          to label %134 unwind label %154

134:                                              ; preds = %130
  %135 = invoke noundef float @_ZNK16depth_clustering7Radians9ToDegreesEv(ptr noundef nonnull align 4 dereferenceable(5) %133)
          to label %136 unwind label %154

136:                                              ; preds = %134
  %137 = fpext float %135 to double
  %138 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 1
  %139 = invoke noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams4stepEv(ptr noundef nonnull align 4 dereferenceable(36) %138)
          to label %140 unwind label %154

140:                                              ; preds = %136
  %141 = invoke noundef float @_ZNK16depth_clustering7Radians9ToDegreesEv(ptr noundef nonnull align 4 dereferenceable(5) %139)
          to label %142 unwind label %154

142:                                              ; preds = %140
  %143 = fpext float %141 to double
  %144 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %119, ptr noundef @.str.13, double noundef %125, double noundef %131, double noundef %137, double noundef %143) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %145

145:                                              ; preds = %184, %142
  %146 = load i32, ptr %20, align 4, !tbaa !11
  %147 = load i32, ptr %15, align 4, !tbaa !11
  %148 = icmp slt i32 %146, %147
  br i1 %148, label %167, label %149

149:                                              ; preds = %145
  store i32 4, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %201

150:                                              ; preds = %95
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %7, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %8, align 4
  br label %265

154:                                              ; preds = %140, %136, %134, %130, %128, %124, %122, %117, %98
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %7, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %8, align 4
  br label %264

158:                                              ; preds = %104, %101
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %7, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %8, align 4
  br label %166

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

166:                                              ; preds = %162, %158
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr %17) #7
  br label %264

167:                                              ; preds = %145
  %168 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %169 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 1
  %170 = invoke noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams11start_angleEv(ptr noundef nonnull align 4 dereferenceable(36) %169)
          to label %171 unwind label %187

171:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %172 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 1
  %173 = invoke noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams4stepEv(ptr noundef nonnull align 4 dereferenceable(36) %172)
          to label %174 unwind label %191

174:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  %175 = load i32, ptr %20, align 4, !tbaa !11
  %176 = sitofp i32 %175 to float
  store float %176, ptr %23, align 4, !tbaa !14
  %177 = invoke i64 @_ZNK16depth_clustering7RadiansmlERKf(ptr noundef nonnull align 4 dereferenceable(5) %173, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %178 unwind label %195

178:                                              ; preds = %174
  %179 = trunc i64 %177 to i40
  store i40 %179, ptr %22, align 4
  %180 = invoke i64 @_ZNK16depth_clustering7RadiansplERKS0_(ptr noundef nonnull align 4 dereferenceable(5) %170, ptr noundef nonnull align 4 dereferenceable(5) %22)
          to label %181 unwind label %195

181:                                              ; preds = %178
  %182 = trunc i64 %180 to i40
  store i40 %182, ptr %21, align 4
  invoke void @_ZNSt6vectorIN16depth_clustering7RadiansESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %168, ptr noundef nonnull align 4 dereferenceable(5) %21)
          to label %183 unwind label %195

183:                                              ; preds = %181
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  br label %184

184:                                              ; preds = %183
  %185 = load i32, ptr %20, align 4, !tbaa !11
  %186 = add nsw i32 %185, 1
  store i32 %186, ptr %20, align 4, !tbaa !11
  br label %145, !llvm.loop !18

187:                                              ; preds = %167
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %7, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %8, align 4
  br label %200

191:                                              ; preds = %171
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %7, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %8, align 4
  br label %199

195:                                              ; preds = %181, %178, %174
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %7, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %199

199:                                              ; preds = %195, %191
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %200

200:                                              ; preds = %199, %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %264

201:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 36, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %202 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 4) #7
  %203 = invoke noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %202, ptr noundef null)
          to label %204 unwind label %224

204:                                              ; preds = %201
  %205 = fptrunc double %203 to float
  %206 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %205)
          to label %207 unwind label %224

207:                                              ; preds = %204
  %208 = trunc i64 %206 to i40
  store i40 %208, ptr %25, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %209 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  %210 = invoke noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %209, ptr noundef null)
          to label %211 unwind label %228

211:                                              ; preds = %207
  %212 = fptrunc double %210 to float
  %213 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %212)
          to label %214 unwind label %228

214:                                              ; preds = %211
  %215 = trunc i64 %213 to i40
  store i40 %215, ptr %26, align 4
  %216 = load i32, ptr %16, align 4, !tbaa !11
  invoke void @_ZN16depth_clustering10SpanParamsC2ERKNS_7RadiansES3_i(ptr noundef nonnull align 4 dereferenceable(36) %24, ptr noundef nonnull align 4 dereferenceable(5) %25, ptr noundef nonnull align 4 dereferenceable(5) %26, i32 noundef %216)
          to label %217 unwind label %228

217:                                              ; preds = %214
  %218 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %218, ptr align 4 %24, i64 36, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store i64 4, ptr %27, align 8, !tbaa !20
  br label %219

219:                                              ; preds = %243, %217
  %220 = load i64, ptr %27, align 8, !tbaa !20
  %221 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  %222 = icmp ult i64 %220, %221
  br i1 %222, label %233, label %223

223:                                              ; preds = %219
  store i32 7, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %250

224:                                              ; preds = %204, %201
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %7, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %8, align 4
  br label %232

228:                                              ; preds = %214, %211, %207
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %7, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  br label %232

232:                                              ; preds = %228, %224
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr %24) #7
  br label %264

233:                                              ; preds = %219
  %234 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %235 = load i64, ptr %27, align 8, !tbaa !20
  %236 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %235) #7
  %237 = invoke noundef float @_ZNSt7__cxx114stofERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %236, ptr noundef null)
          to label %238 unwind label %246

238:                                              ; preds = %233
  %239 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %237)
          to label %240 unwind label %246

240:                                              ; preds = %238
  %241 = trunc i64 %239 to i40
  store i40 %241, ptr %28, align 4
  invoke void @_ZNSt6vectorIN16depth_clustering7RadiansESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %234, ptr noundef nonnull align 4 dereferenceable(5) %28)
          to label %242 unwind label %246

242:                                              ; preds = %240
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  br label %243

243:                                              ; preds = %242
  %244 = load i64, ptr %27, align 8, !tbaa !20
  %245 = add i64 %244, 1
  store i64 %245, ptr %27, align 8, !tbaa !20
  br label %219, !llvm.loop !22

246:                                              ; preds = %240, %238, %233
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %7, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %264

250:                                              ; preds = %223
  %251 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 3
  %252 = call noundef i64 @_ZNKSt6vectorIN16depth_clustering7RadiansESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %251) #7
  %253 = load i32, ptr %16, align 4, !tbaa !11
  %254 = sext i32 %253 to i64
  %255 = icmp ne i64 %252, %254
  br i1 %255, label %256, label %259

256:                                              ; preds = %250
  %257 = load ptr, ptr @stderr, align 8, !tbaa !5
  %258 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %257, ptr noundef @.str.14) #7
  call void @_ZNSt10unique_ptrIN16depth_clustering16ProjectionParamsESt14default_deleteIS1_EEC2IS3_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr null) #7
  store i32 1, ptr %11, align 4
  br label %260

259:                                              ; preds = %250
  store i32 0, ptr %11, align 4
  br label %260

260:                                              ; preds = %259, %256
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %261

261:                                              ; preds = %260, %84
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #7
  %262 = load i32, ptr %11, align 4
  switch i32 %262, label %268 [
    i32 0, label %263
  ]

263:                                              ; preds = %261
  br label %267

264:                                              ; preds = %246, %232, %200, %166, %154
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %265

265:                                              ; preds = %264, %150
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %266

266:                                              ; preds = %265, %91, %87
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #7
  br label %270

267:                                              ; preds = %263, %74
  br label %57, !llvm.loop !23

268:                                              ; preds = %261, %66
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #7
  %269 = load i32, ptr %11, align 4
  switch i32 %269, label %286 [
    i32 2, label %271
  ]

270:                                              ; preds = %266, %67
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #7
  br label %287

271:                                              ; preds = %268
  invoke void @_ZN16depth_clustering16ProjectionParams10FillCosSinEv(ptr noundef nonnull align 8 dereferenceable(216) %9)
          to label %272 unwind label %52

272:                                              ; preds = %271
  %273 = invoke noundef zeroext i1 @_ZN16depth_clustering16ProjectionParams5validEv(ptr noundef nonnull align 8 dereferenceable(216) %9)
          to label %274 unwind label %52

274:                                              ; preds = %272
  br i1 %273, label %278, label %275

275:                                              ; preds = %274
  %276 = load ptr, ptr @stderr, align 8, !tbaa !5
  %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %276, ptr noundef @.str.15) #7
  call void @_ZNSt10unique_ptrIN16depth_clustering16ProjectionParamsESt14default_deleteIS1_EEC2IS3_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr null) #7
  store i32 1, ptr %11, align 4
  br label %286

278:                                              ; preds = %274
  %279 = load ptr, ptr @stderr, align 8, !tbaa !5
  %280 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 3
  %281 = call noundef i64 @_ZNKSt6vectorIN16depth_clustering7RadiansESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %280) #7
  %282 = getelementptr inbounds %"class.depth_clustering::ProjectionParams", ptr %9, i32 0, i32 2
  %283 = call noundef i64 @_ZNKSt6vectorIN16depth_clustering7RadiansESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %282) #7
  %284 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %279, ptr noundef @.str.16, i64 noundef %281, i64 noundef %283) #7
  invoke void @_ZN16depth_clustering9mem_utils11make_uniqueINS_16ProjectionParamsEJRS2_EEESt10unique_ptrIT_St14default_deleteIS5_EEDpOT0_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(216) %9)
          to label %285 unwind label %52

285:                                              ; preds = %278
  store i32 1, ptr %11, align 4
  br label %286

286:                                              ; preds = %285, %275, %268, %39
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %10) #7
  call void @llvm.lifetime.end.p0(i64 520, ptr %10) #7
  call void @_ZN16depth_clustering16ProjectionParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(216) %9) #7
  call void @llvm.lifetime.end.p0(i64 216, ptr %9) #7
  ret void

287:                                              ; preds = %270, %52
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %10) #7
  br label %288

288:                                              ; preds = %287, %48
  call void @llvm.lifetime.end.p0(i64 520, ptr %10) #7
  call void @_ZN16depth_clustering16ProjectionParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(216) %9) #7
  call void @llvm.lifetime.end.p0(i64 216, ptr %9) #7
  br label %289

289:                                              ; preds = %288, %44
  %290 = load ptr, ptr %7, align 8
  %291 = load i32, ptr %8, align 4
  %292 = insertvalue { ptr, i32 } poison, ptr %290, 0
  %293 = insertvalue { ptr, i32 } %292, i32 %291, 1
  resume { ptr, i32 } %293
}

declare void @_ZNSt6locale6globalERKS_(ptr dead_on_unwind writable sret(%"class.std::locale") align 8, ptr noundef nonnull align 8 dereferenceable(8)) #5

declare void @_ZNSt6localeC1EPKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZNSt6localeD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef, i32 noundef) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv(ptr noundef nonnull align 8 dereferenceable(256)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EES4_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext) #5

; Function Attrs: mustprogress uwtable
declare noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEEcvbEv(ptr noundef nonnull align 8 dereferenceable(264)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5boost9algorithm11starts_withINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEA2_cEEbRKT_RKT0_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN5boost9algorithm5splitISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EERS8_NS0_6detail10is_any_ofFIcEEEERT_SG_OT0_T1_NS0_24token_compress_mode_typeE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5boost9algorithm9is_any_ofIA2_cEENS0_6detail10is_any_ofFINS_11range_valueIT_E4typeEEERKS6_(ptr dead_on_unwind noalias writable sret(%"struct.boost::algorithm::detail::is_any_ofF") align 8, ptr noundef nonnull align 1 dereferenceable(2)) #6

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNSt7__cxx114stoiERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) #6

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

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #6

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZNK16depth_clustering7RadiansplERKS0_(ptr noundef nonnull align 4 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(5)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZNK16depth_clustering7RadiansmlERKf(ptr noundef nonnull align 4 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZNSt7__cxx114stofERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #6

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #2 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{i64 0, i64 4, !14, i64 4, i64 1, !16, i64 8, i64 4, !14, i64 12, i64 1, !16, i64 16, i64 4, !14, i64 20, i64 1, !16, i64 24, i64 4, !14, i64 28, i64 1, !16, i64 32, i64 4, !11}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!21, !21, i64 0}
!21 = !{!"long", !7, i64 0}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}


; 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::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.12" }
%"struct.std::_Head_base.12" = type { ptr }
%"class.std::locale" = type { ptr }
%"class.depth_clustering::ProjectionParams" = type { %"class.depth_clustering::SpanParams", %"class.depth_clustering::SpanParams", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.5", %"class.std::vector.5", %"class.std::vector.5", %"class.std::vector.5" }
%"class.depth_clustering::SpanParams" = type { %"class.depth_clustering::Radians", %"class.depth_clustering::Radians", %"class.depth_clustering::Radians", %"class.depth_clustering::Radians", i32 }
%"class.depth_clustering::Radians" = type <{ float, i8, [3 x i8] }>
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<depth_clustering::Radians, std::allocator<depth_clustering::Radians>>::_Vector_impl" }
%"struct.std::_Vector_base<depth_clustering::Radians, std::allocator<depth_clustering::Radians>>::_Vector_impl" = type { %"struct.std::_Vector_base<depth_clustering::Radians, std::allocator<depth_clustering::Radians>>::_Vector_impl_data" }
%"struct.std::_Vector_base<depth_clustering::Radians, std::allocator<depth_clustering::Radians>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = 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::basic_ifstream" = type { %"class.std::basic_istream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon.13 }
%union.anon.13 = type { i32 }
%"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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.17 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.17 = type { i64, [8 x i8] }
%"class.std::vector.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.boost::algorithm::detail::is_any_ofF" = type { %union.anon.23, i64 }
%union.anon.23 = type { ptr, [8 x i8] }

@stderr = external local_unnamed_addr global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [53 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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16depth_clustering10SpanParamsC2ERKNS_7RadiansES3_i(ptr noundef nonnull align 4 dereferenceable(36), ptr noundef nonnull align 4 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(5), i32 noundef) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16depth_clustering16ProjectionParams10FillCosSinEv(ptr noundef nonnull align 8 dereferenceable(216)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN16depth_clustering16ProjectionParams5validEv(ptr noundef nonnull align 8 dereferenceable(216)) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16depth_clustering16ProjectionParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(216)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16depth_clustering9mem_utils11make_uniqueINS_16ProjectionParamsEJRS2_EEESt10unique_ptrIT_St14default_deleteIS5_EEDpOT0_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8, ptr noundef nonnull align 8 dereferenceable(216)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16depth_clustering16ProjectionParams14FromConfigFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %1) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::locale", align 8
  %4 = alloca %"class.std::locale", align 8
  %5 = alloca %"class.depth_clustering::ProjectionParams", align 8
  %6 = alloca %"class.std::basic_ifstream", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::vector.18", align 8
  %9 = alloca %"struct.boost::algorithm::detail::is_any_ofF", align 8
  %10 = alloca %"class.depth_clustering::SpanParams", align 4
  %11 = alloca %"class.depth_clustering::Radians", align 8
  %12 = alloca %"class.depth_clustering::Radians", align 8
  %13 = alloca %"class.depth_clustering::Radians", align 8
  %14 = alloca %"class.depth_clustering::Radians", align 8
  %15 = alloca float, align 4
  %16 = alloca %"class.depth_clustering::SpanParams", align 4
  %17 = alloca %"class.depth_clustering::Radians", align 8
  %18 = alloca %"class.depth_clustering::Radians", align 8
  %19 = alloca %"class.depth_clustering::Radians", align 8
  %20 = load ptr, ptr @stderr, align 8, !tbaa !5
  %21 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef nonnull @.str.5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #9
  call void @_ZNSt6localeC1EPKc(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.6)
  invoke void @_ZNSt6locale6globalERKS_(ptr dead_on_unwind nonnull writable sret(%"class.std::locale") align 8 %3, ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %22 unwind label %32

22:                                               ; preds = %2
  call void @_ZNSt6localeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  call void @_ZNSt6localeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  %23 = load ptr, ptr @stderr, align 8, !tbaa !5
  %24 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.7) #8
  call void @llvm.lifetime.start.p0(i64 216, ptr nonnull %5) #9
  call void @_ZN16depth_clustering16ProjectionParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(216) %5)
  call void @llvm.lifetime.start.p0(i64 520, ptr nonnull %6) #9
  %25 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #9
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %6, ptr noundef %25, i32 noundef 8)
          to label %26 unwind label %34

26:                                               ; preds = %22
  %27 = call noundef zeroext i1 @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv(ptr noundef nonnull align 8 dereferenceable(256) %6)
  br i1 %27, label %38, label %28

28:                                               ; preds = %26
  %29 = load ptr, ptr @stderr, align 8, !tbaa !5
  %30 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #9
  %31 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %29, ptr noundef nonnull @.str.8, ptr noundef %30) #8
  call void @_ZNSt10unique_ptrIN16depth_clustering16ProjectionParamsESt14default_deleteIS1_EEC2IS3_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr null) #9
  br label %182

32:                                               ; preds = %2
  %33 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6localeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  br label %185

34:                                               ; preds = %22
  %35 = landingpad { ptr, i32 }
          cleanup
  br label %184

36:                                               ; preds = %178, %172, %171
  %37 = landingpad { ptr, i32 }
          cleanup
  br label %183

38:                                               ; preds = %26
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #9
  %39 = getelementptr inbounds i8, ptr %5, i64 36
  %40 = getelementptr inbounds i8, ptr %5, i64 72
  %41 = getelementptr inbounds i8, ptr %5, i64 96
  br label %42

42:                                               ; preds = %.backedge, %38
  %43 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EES4_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(32) %7, i8 noundef signext 10)
          to label %44 unwind label %51

44:                                               ; preds = %42
  %45 = load ptr, ptr %43, align 8, !tbaa !9
  %46 = getelementptr i8, ptr %45, i64 -24
  %47 = load i64, ptr %46, align 8
  %48 = getelementptr inbounds i8, ptr %43, i64 %47
  %49 = invoke noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEEcvbEv(ptr noundef nonnull align 8 dereferenceable(264) %48)
          to label %50 unwind label %51

50:                                               ; preds = %44
  br i1 %49, label %53, label %171

51:                                               ; preds = %53, %44, %42
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %170

53:                                               ; preds = %50
  %54 = invoke noundef zeroext i1 @_ZN5boost9algorithm11starts_withINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEA2_cEEbRKT_RKT0_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.9)
          to label %55 unwind label %51

55:                                               ; preds = %53
  br i1 %54, label %56, label %60

56:                                               ; preds = %55
  %57 = load ptr, ptr @stderr, align 8, !tbaa !5
  %58 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %7) #9
  %59 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %57, ptr noundef nonnull @.str.10, ptr noundef %58) #8
  br label %.backedge

60:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #9
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  invoke void @_ZN5boost9algorithm9is_any_ofIA2_cEENS0_6detail10is_any_ofFINS_11range_valueIT_E4typeEEERKS6_(ptr dead_on_unwind nonnull writable sret(%"struct.boost::algorithm::detail::is_any_ofF") align 8 %9, ptr noundef nonnull align 1 dereferenceable(2) @.str.11)
          to label %61 unwind label %66

61:                                               ; preds = %60
  %62 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN5boost9algorithm5splitISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EERS8_NS0_6detail10is_any_ofFIcEEEERT_SG_OT0_T1_NS0_24token_compress_mode_typeE(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull %9, i32 noundef 1)
          to label %63 unwind label %68

63:                                               ; preds = %61
  call void @_ZN5boost9algorithm6detail10is_any_ofFIcED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  %64 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  %65 = icmp ult i64 %64, 4
  br i1 %65, label %167, label %70

66:                                               ; preds = %60
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %166

68:                                               ; preds = %61
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5boost9algorithm6detail10is_any_ofFIcED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  br label %166

70:                                               ; preds = %63
  %71 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 0) #9
  %72 = invoke noundef i32 @_ZNSt7__cxx114stoiERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef null, i32 noundef 10)
          to label %73 unwind label %109

73:                                               ; preds = %70
  %74 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 1) #9
  %75 = invoke noundef i32 @_ZNSt7__cxx114stoiERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef null, i32 noundef 10)
          to label %76 unwind label %111

76:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  %77 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 2) #9
  %78 = invoke noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef null)
          to label %79 unwind label %113

79:                                               ; preds = %76
  %80 = fptrunc double %78 to float
  %81 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %80)
          to label %82 unwind label %113

82:                                               ; preds = %79
  %83 = trunc i64 %81 to i40
  store i40 %83, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #9
  %84 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 3) #9
  %85 = invoke noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef null)
          to label %86 unwind label %115

86:                                               ; preds = %82
  %87 = fptrunc double %85 to float
  %88 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %87)
          to label %89 unwind label %115

89:                                               ; preds = %86
  %90 = trunc i64 %88 to i40
  store i40 %90, ptr %12, align 8
  invoke void @_ZN16depth_clustering10SpanParamsC2ERKNS_7RadiansES3_i(ptr noundef nonnull align 4 dereferenceable(36) %10, ptr noundef nonnull align 4 dereferenceable(5) %11, ptr noundef nonnull align 4 dereferenceable(5) %12, i32 noundef %72)
          to label %91 unwind label %115

91:                                               ; preds = %89
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(36) %39, ptr noundef nonnull align 4 dereferenceable(36) %10, i64 36, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %10) #9
  %92 = load ptr, ptr @stderr, align 8, !tbaa !5
  %93 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams11start_angleEv(ptr noundef nonnull align 4 dereferenceable(36) %39)
  %94 = call noundef float @_ZNK16depth_clustering7Radians9ToDegreesEv(ptr noundef nonnull align 4 dereferenceable(5) %93)
  %95 = fpext float %94 to double
  %96 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams9end_angleEv(ptr noundef nonnull align 4 dereferenceable(36) %39)
  %97 = call noundef float @_ZNK16depth_clustering7Radians9ToDegreesEv(ptr noundef nonnull align 4 dereferenceable(5) %96)
  %98 = fpext float %97 to double
  %99 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams4spanEv(ptr noundef nonnull align 4 dereferenceable(36) %39)
  %100 = call noundef float @_ZNK16depth_clustering7Radians9ToDegreesEv(ptr noundef nonnull align 4 dereferenceable(5) %99)
  %101 = fpext float %100 to double
  %102 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams4stepEv(ptr noundef nonnull align 4 dereferenceable(36) %39)
  %103 = call noundef float @_ZNK16depth_clustering7Radians9ToDegreesEv(ptr noundef nonnull align 4 dereferenceable(5) %102)
  %104 = fpext float %103 to double
  %105 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %92, ptr noundef nonnull @.str.13, double noundef %95, double noundef %98, double noundef %101, double noundef %104) #8
  %106 = icmp sgt i32 %72, 0
  br i1 %106, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %127, %91
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %16) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #9
  %107 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 4) #9
  %108 = invoke noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %107, ptr noundef null)
          to label %131 unwind label %148

109:                                              ; preds = %70
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %166

111:                                              ; preds = %73
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %166

113:                                              ; preds = %79, %76
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %117

115:                                              ; preds = %89, %86, %82
  %116 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  br label %117

117:                                              ; preds = %115, %113
  %.pn = phi { ptr, i32 } [ %116, %115 ], [ %114, %113 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %10) #9
  br label %166

.lr.ph:                                           ; preds = %91, %127
  %.01656 = phi i32 [ %128, %127 ], [ 0, %91 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #9
  %118 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams11start_angleEv(ptr noundef nonnull align 4 dereferenceable(36) %39)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  %119 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNK16depth_clustering10SpanParams4stepEv(ptr noundef nonnull align 4 dereferenceable(36) %39)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #9
  %120 = uitofp nneg i32 %.01656 to float
  store float %120, ptr %15, align 4, !tbaa !12
  %121 = invoke i64 @_ZNK16depth_clustering7RadiansmlERKf(ptr noundef nonnull align 4 dereferenceable(5) %119, ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %122 unwind label %129

122:                                              ; preds = %.lr.ph
  %123 = trunc i64 %121 to i40
  store i40 %123, ptr %14, align 8
  %124 = invoke i64 @_ZNK16depth_clustering7RadiansplERKS0_(ptr noundef nonnull align 4 dereferenceable(5) %118, ptr noundef nonnull align 4 dereferenceable(5) %14)
          to label %125 unwind label %129

125:                                              ; preds = %122
  %126 = trunc i64 %124 to i40
  store i40 %126, ptr %13, align 8
  invoke void @_ZNSt6vectorIN16depth_clustering7RadiansESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 4 dereferenceable(5) %13)
          to label %127 unwind label %129

127:                                              ; preds = %125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  %128 = add nuw nsw i32 %.01656, 1
  %exitcond.not = icmp eq i32 %128, %72
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !18

129:                                              ; preds = %125, %122, %.lr.ph
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  br label %166

131:                                              ; preds = %._crit_edge
  %132 = fptrunc double %108 to float
  %133 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %132)
          to label %134 unwind label %148

134:                                              ; preds = %131
  %135 = trunc i64 %133 to i40
  store i40 %135, ptr %17, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #9
  %136 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  %137 = invoke noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %136, ptr noundef null)
          to label %138 unwind label %150

138:                                              ; preds = %134
  %139 = fptrunc double %137 to float
  %140 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %139)
          to label %141 unwind label %150

141:                                              ; preds = %138
  %142 = trunc i64 %140 to i40
  store i40 %142, ptr %18, align 8
  invoke void @_ZN16depth_clustering10SpanParamsC2ERKNS_7RadiansES3_i(ptr noundef nonnull align 4 dereferenceable(36) %16, ptr noundef nonnull align 4 dereferenceable(5) %17, ptr noundef nonnull align 4 dereferenceable(5) %18, i32 noundef %75)
          to label %143 unwind label %150

143:                                              ; preds = %141
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(36) %5, ptr noundef nonnull align 4 dereferenceable(36) %16, i64 36, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %16) #9
  %144 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  %145 = icmp ugt i64 %144, 4
  br i1 %145, label %.lr.ph59, label %._crit_edge60

._crit_edge60:                                    ; preds = %159, %143
  %146 = call noundef i64 @_ZNKSt6vectorIN16depth_clustering7RadiansESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %41) #9
  %147 = sext i32 %75 to i64
  %.not = icmp eq i64 %146, %147
  br i1 %.not, label %165, label %167

148:                                              ; preds = %131, %._crit_edge
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %152

150:                                              ; preds = %141, %138, %134
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  br label %152

152:                                              ; preds = %150, %148
  %.pn31 = phi { ptr, i32 } [ %151, %150 ], [ %149, %148 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %16) #9
  br label %166

.lr.ph59:                                         ; preds = %143, %159
  %.057 = phi i64 [ %160, %159 ], [ 4, %143 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #9
  %153 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %.057) #9
  %154 = invoke noundef float @_ZNSt7__cxx114stofERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32) %153, ptr noundef null)
          to label %155 unwind label %163

155:                                              ; preds = %.lr.ph59
  %156 = invoke i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef %154)
          to label %157 unwind label %163

157:                                              ; preds = %155
  %158 = trunc i64 %156 to i40
  store i40 %158, ptr %19, align 8
  invoke void @_ZNSt6vectorIN16depth_clustering7RadiansESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %41, ptr noundef nonnull align 4 dereferenceable(5) %19)
          to label %159 unwind label %163

159:                                              ; preds = %157
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  %160 = add nuw i64 %.057, 1
  %161 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  %162 = icmp ult i64 %160, %161
  br i1 %162, label %.lr.ph59, label %._crit_edge60, !llvm.loop !20

163:                                              ; preds = %157, %155, %.lr.ph59
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  br label %166

165:                                              ; preds = %._crit_edge60
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #9
  br label %.backedge

.backedge:                                        ; preds = %165, %56
  br label %42, !llvm.loop !21

166:                                              ; preds = %109, %163, %152, %129, %117, %111, %68, %66
  %.pn33.pn.pn = phi { ptr, i32 } [ %69, %68 ], [ %67, %66 ], [ %110, %109 ], [ %130, %129 ], [ %164, %163 ], [ %.pn31, %152 ], [ %.pn, %117 ], [ %112, %111 ]
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #9
  br label %170

167:                                              ; preds = %._crit_edge60, %63
  %.str.12.sink = phi ptr [ @.str.12, %63 ], [ @.str.14, %._crit_edge60 ]
  %168 = load ptr, ptr @stderr, align 8, !tbaa !5
  %169 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %168, ptr noundef nonnull %.str.12.sink) #8
  call void @_ZNSt10unique_ptrIN16depth_clustering16ProjectionParamsESt14default_deleteIS1_EEC2IS3_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr null) #9
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #9
  br label %182

170:                                              ; preds = %166, %51
  %.pn33.pn.pn.pn = phi { ptr, i32 } [ %.pn33.pn.pn, %166 ], [ %52, %51 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #9
  br label %183

171:                                              ; preds = %50
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #9
  invoke void @_ZN16depth_clustering16ProjectionParams10FillCosSinEv(ptr noundef nonnull align 8 dereferenceable(216) %5)
          to label %172 unwind label %36

172:                                              ; preds = %171
  %173 = invoke noundef zeroext i1 @_ZN16depth_clustering16ProjectionParams5validEv(ptr noundef nonnull align 8 dereferenceable(216) %5)
          to label %174 unwind label %36

174:                                              ; preds = %172
  %175 = load ptr, ptr @stderr, align 8, !tbaa !5
  br i1 %173, label %178, label %176

176:                                              ; preds = %174
  %177 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %175, ptr noundef nonnull @.str.15) #8
  call void @_ZNSt10unique_ptrIN16depth_clustering16ProjectionParamsESt14default_deleteIS1_EEC2IS3_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr null) #9
  br label %182

178:                                              ; preds = %174
  %179 = call noundef i64 @_ZNKSt6vectorIN16depth_clustering7RadiansESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %41) #9
  %180 = call noundef i64 @_ZNKSt6vectorIN16depth_clustering7RadiansESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #9
  %181 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %175, ptr noundef nonnull @.str.16, i64 noundef %179, i64 noundef %180) #8
  invoke void @_ZN16depth_clustering9mem_utils11make_uniqueINS_16ProjectionParamsEJRS2_EEESt10unique_ptrIT_St14default_deleteIS5_EEDpOT0_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %0, ptr noundef nonnull align 8 dereferenceable(216) %5)
          to label %182 unwind label %36

182:                                              ; preds = %167, %178, %176, %28
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %6) #9
  call void @llvm.lifetime.end.p0(i64 520, ptr nonnull %6) #9
  call void @_ZN16depth_clustering16ProjectionParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(216) %5) #9
  call void @llvm.lifetime.end.p0(i64 216, ptr nonnull %5) #9
  ret void

183:                                              ; preds = %170, %36
  %.pn38 = phi { ptr, i32 } [ %37, %36 ], [ %.pn33.pn.pn.pn, %170 ]
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %6) #9
  br label %184

184:                                              ; preds = %183, %34
  %.pn38.pn = phi { ptr, i32 } [ %.pn38, %183 ], [ %35, %34 ]
  call void @llvm.lifetime.end.p0(i64 520, ptr nonnull %6) #9
  call void @_ZN16depth_clustering16ProjectionParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(216) %5) #9
  call void @llvm.lifetime.end.p0(i64 216, ptr nonnull %5) #9
  br label %185

185:                                              ; preds = %184, %32
  %.pn38.pn.pn = phi { ptr, i32 } [ %.pn38.pn, %184 ], [ %33, %32 ]
  resume { ptr, i32 } %.pn38.pn.pn
}

declare void @_ZNSt6locale6globalERKS_(ptr dead_on_unwind writable sret(%"class.std::locale") align 8, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

declare void @_ZNSt6localeC1EPKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZNSt6localeD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef, i32 noundef) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv(ptr noundef nonnull align 8 dereferenceable(256)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EES4_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare noundef zeroext i1 @_ZNKSt9basic_iosIcSt11char_traitsIcEEcvbEv(ptr noundef nonnull align 8 dereferenceable(264)) local_unnamed_addr #3 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN5boost9algorithm5splitISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EERS8_NS0_6detail10is_any_ofFIcEEEERT_SG_OT0_T1_NS0_24token_compress_mode_typeE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5boost9algorithm9is_any_ofIA2_cEENS0_6detail10is_any_ofFINS_11range_valueIT_E4typeEEERKS6_(ptr dead_on_unwind noalias writable sret(%"struct.boost::algorithm::detail::is_any_ofF") align 8, ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #7

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNSt7__cxx114stoiERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) local_unnamed_addr #7

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

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZN16depth_clustering7Radians11FromDegreesEf(float noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZNSt7__cxx114stodERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #7

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZNK16depth_clustering7RadiansplERKS0_(ptr noundef nonnull align 4 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(5)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZNK16depth_clustering7RadiansmlERKf(ptr noundef nonnull align 4 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZNSt7__cxx114stofERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPm(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #7

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #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 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "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 "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 #7 = { 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 #8 = { cold nounwind }
attributes #9 = { 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 = !{!"vtable pointer", !8, i64 0}
!11 = !{i64 0, i64 4, !12, i64 4, i64 1, !14, i64 8, i64 4, !12, i64 12, i64 1, !14, i64 16, i64 4, !12, i64 20, i64 1, !14, i64 24, i64 4, !12, i64 28, i64 1, !14, i64 32, i64 4, !16}
!12 = !{!13, !13, i64 0}
!13 = !{!"float", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}


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