; LLVM IR from thepowersgang/mrustc :: src/hir/type.ll (ZNK3HIR7TypeRef13clone_shallowEv)

; 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.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr", [8 x i8] }
%"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.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.HIR::GenericParams" = type { %"class.std::vector", %"class.std::vector.2", %"class.std::vector.7", %"class.std::vector.12" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.2" = type { %"struct.std::_Vector_base.3" }
%"struct.std::_Vector_base.3" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.7" = type { %"struct.std::_Vector_base.8" }
%"struct.std::_Vector_base.8" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.12" = type { %"struct.std::_Vector_base.13" }
%"struct.std::_Vector_base.13" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.22, %class.ThinVector.23, %class.ThinVector.24 }
%class.ThinVector.22 = type { ptr }
%class.ThinVector.23 = type { ptr }
%class.ThinVector.24 = type { ptr }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.25" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"class.std::unique_ptr.25" = type { %"struct.std::__uniq_ptr_data.26" }
%"struct.std::__uniq_ptr_data.26" = type { %"class.std::__uniq_ptr_impl.27" }
%"class.std::__uniq_ptr_impl.27" = type { %"class.std::tuple.28" }
%"class.std::tuple.28" = type { %"struct.std::_Tuple_impl.29" }
%"struct.std::_Tuple_impl.29" = type { %"struct.std::_Head_base.32" }
%"struct.std::_Head_base.32" = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.HIR::TypeData_NamedFunction_Ty" = type { i32, %"union.HIR::TypeData_NamedFunction_Ty::DataUnion" }
%"union.HIR::TypeData_NamedFunction_Ty::DataUnion" = type { %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" }
%"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" = type { ptr, i64 }
%"class.HIR::TypeData" = type { i32, %"union.HIR::TypeData::DataUnion" }
%"union.HIR::TypeData::DataUnion" = type { %"struct.HIR::TypeData_ErasedType", [16 x i8] }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.114", %"class.std::vector.119", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.114" = type { %"struct.std::_Vector_base.115" }
%"struct.std::_Vector_base.115" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.119" = type { %"struct.std::_Vector_base.120" }
%"struct.std::_Vector_base.120" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData::Data_Infer" = type { i32, i32 }
%"struct.HIR::TypeData::Data_Diverge" = type { i8 }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.25" }
%"struct.HIR::GenericRef" = type <{ %class.RcString, i32, [4 x i8] }>
%"struct.HIR::TypeData_TraitObject" = type <{ %"class.HIR::TraitPath", %"class.std::vector.109", %"struct.HIR::LifetimeRef", [4 x i8] }>
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr.25", %"class.HIR::GenericPath", %"class.std::map.98", %"class.std::map.104", ptr }
%"class.std::map.98" = type { %"class.std::_Rb_tree.99" }
%"class.std::_Rb_tree.99" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.104" = type { %"class.std::_Rb_tree.105" }
%"class.std::_Rb_tree.105" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector.109" = type { %"struct.std::_Vector_base.110" }
%"struct.std::_Vector_base.110" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.__gnu_cxx::__normal_iterator.146" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.147" = type { ptr }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn" = type <{ %"class.HIR::Path", i32, [4 x i8] }>
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"class.std::vector.17" = type { %"struct.std::_Vector_base.18" }
%"struct.std::_Vector_base.18" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.149" = type { ptr }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"struct.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.17" }
%"struct.HIR::TypeData::Data_Closure" = type { ptr }
%"struct.HIR::TypeData::Data_Generator" = type { ptr }

@.str.18 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK3HIR7TypeRef13clone_shallowEv = external hidden unnamed_addr constant [51 x i8], align 1

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #0

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR9ArraySize5cloneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::ArraySize") align 8, ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

declare i32 @__gxx_personality_v0(...)

declare void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8, ptr noundef nonnull align 8 dereferenceable(96)) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #4 align 2

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

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

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

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

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

declare void @_ZNK3HIR10PathParams5cloneEv(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8, ptr noundef nonnull align 8 dereferenceable(24)) #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

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

declare void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8, ptr noundef nonnull align 8 dereferenceable(88)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104)) #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR10GenericRefD2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR15TypePathBinding5cloneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypePathBinding") align 8, ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR25TypeData_NamedFunction_Ty5cloneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8, ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3HIR7TypeRef13clone_shallowEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %10 = alloca %"class.HIR::TypeData", align 8
  %11 = alloca %"struct.HIR::TypeData::Data_Infer", align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca %"class.HIR::TypeData", align 8
  %17 = alloca %"struct.HIR::TypeData::Data_Diverge", align 1
  %18 = alloca i8, align 1
  %19 = alloca ptr, align 8
  %20 = alloca %"class.HIR::TypeData", align 8
  %21 = alloca i8, align 1
  %22 = alloca ptr, align 8
  %23 = alloca %"class.HIR::TypeData", align 8
  %24 = alloca %"struct.HIR::TypeData_Path", align 8
  %25 = alloca i8, align 1
  %26 = alloca ptr, align 8
  %27 = alloca %"class.HIR::TypeData", align 8
  %28 = alloca %"struct.HIR::GenericRef", align 8
  %29 = alloca i8, align 1
  %30 = alloca ptr, align 8
  %31 = alloca %"struct.HIR::TypeData_TraitObject", align 8
  %32 = alloca %"class.HIR::TraitPath", align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"class.__gnu_cxx::__normal_iterator.146", align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.146", align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.HIR::GenericPath", align 8
  %38 = alloca %"class.HIR::TypeData", align 8
  %39 = alloca %"struct.HIR::TypeData_TraitObject", align 8
  %40 = alloca i8, align 1
  %41 = alloca ptr, align 8
  %42 = alloca %"class.std::vector.114", align 8
  %43 = alloca ptr, align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator.147", align 8
  %45 = alloca %"class.__gnu_cxx::__normal_iterator.147", align 8
  %46 = alloca ptr, align 8
  %47 = alloca %"class.HIR::TraitPath", align 8
  %48 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %49 = alloca i8, align 1
  %50 = alloca ptr, align 8
  %51 = alloca i8, align 1
  %52 = alloca ptr, align 8
  %53 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %54 = alloca %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", align 8
  %55 = alloca i8, align 1
  %56 = alloca ptr, align 8
  %57 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %58 = alloca %"class.HIR::TypeRef", align 8
  %59 = alloca i8, align 1
  %60 = alloca ptr, align 8
  %61 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %62 = alloca %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", align 8
  %63 = alloca %"class.HIR::TypeData", align 8
  %64 = alloca %"struct.HIR::TypeData_ErasedType", align 8
  %65 = alloca i8, align 1
  %66 = alloca ptr, align 8
  %67 = alloca %"class.HIR::TypeData", align 8
  %68 = alloca %"struct.HIR::TypeData::Data_Array", align 8
  %69 = alloca i8, align 1
  %70 = alloca ptr, align 8
  %71 = alloca %"class.HIR::TypeData", align 8
  %72 = alloca %"struct.HIR::TypeData::Data_Slice", align 8
  %73 = alloca i8, align 1
  %74 = alloca ptr, align 8
  %75 = alloca %"class.std::vector.17", align 8
  %76 = alloca ptr, align 8
  %77 = alloca %"class.__gnu_cxx::__normal_iterator.149", align 8
  %78 = alloca %"class.__gnu_cxx::__normal_iterator.149", align 8
  %79 = alloca ptr, align 8
  %80 = alloca %"class.HIR::TypeRef", align 8
  %81 = alloca %"class.HIR::TypeData", align 8
  %82 = alloca %"class.std::vector.17", align 8
  %83 = alloca i8, align 1
  %84 = alloca ptr, align 8
  %85 = alloca %"class.HIR::TypeData", align 8
  %86 = alloca %"struct.HIR::TypeData::Data_Borrow", align 8
  %87 = alloca i8, align 1
  %88 = alloca ptr, align 8
  %89 = alloca %"class.HIR::TypeData", align 8
  %90 = alloca %"struct.HIR::TypeData::Data_Pointer", align 8
  %91 = alloca i8, align 1
  %92 = alloca ptr, align 8
  %93 = alloca %"class.HIR::TypeData", align 8
  %94 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %95 = alloca i8, align 1
  %96 = alloca ptr, align 8
  %97 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %98 = alloca ptr, align 8
  %99 = alloca %"class.__gnu_cxx::__normal_iterator.149", align 8
  %100 = alloca %"class.__gnu_cxx::__normal_iterator.149", align 8
  %101 = alloca ptr, align 8
  %102 = alloca %"class.HIR::TypeRef", align 8
  %103 = alloca %"class.HIR::TypeData", align 8
  %104 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %105 = alloca i8, align 1
  %106 = alloca ptr, align 8
  %107 = alloca %"struct.HIR::TypeData::Data_Closure", align 8
  %108 = alloca %"class.HIR::TypeData", align 8
  %109 = alloca %"struct.HIR::TypeData::Data_Closure", align 8
  %110 = alloca i8, align 1
  %111 = alloca ptr, align 8
  %112 = alloca %"struct.HIR::TypeData::Data_Generator", align 8
  %113 = alloca %"class.HIR::TypeData", align 8
  %114 = alloca %"struct.HIR::TypeData::Data_Generator", align 8
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %115 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %116

116:                                              ; preds = %1084, %2
  %117 = load i8, ptr %5, align 1, !tbaa !9, !range !11, !noundef !12
  %118 = trunc i8 %117 to i1
  br i1 %118, label %120, label %119

119:                                              ; preds = %116
  store i32 2, ptr %6, align 4
  br label %1085

120:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #10
  %121 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %115)
  store ptr %121, ptr %7, align 8, !tbaa !5
  br label %122

122:                                              ; preds = %1079, %120
  %123 = load i8, ptr %5, align 1, !tbaa !9, !range !11, !noundef !12
  %124 = trunc i8 %123 to i1
  br i1 %124, label %126, label %125

125:                                              ; preds = %122
  store i32 5, ptr %6, align 4
  br label %1080

126:                                              ; preds = %122
  %127 = load ptr, ptr %7, align 8, !tbaa !5
  %128 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %127)
  switch i32 %128, label %1078 [
    i32 0, label %129
    i32 1, label %130
    i32 2, label %159
    i32 3, label %186
    i32 4, label %215
    i32 5, label %261
    i32 6, label %295
    i32 7, label %381
    i32 8, label %640
    i32 9, label %685
    i32 10, label %721
    i32 11, label %782
    i32 12, label %825
    i32 13, label %865
    i32 14, label %910
    i32 15, label %1012
    i32 16, label %1045
  ]

129:                                              ; preds = %126
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 1172, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef13clone_shallowEv) #11
  unreachable

130:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #10
  store i8 1, ptr %8, align 1, !tbaa !9
  br label %131

131:                                              ; preds = %155, %130
  %132 = load i8, ptr %8, align 1, !tbaa !9, !range !11, !noundef !12
  %133 = trunc i8 %132 to i1
  br i1 %133, label %135, label %134

134:                                              ; preds = %131
  store i32 9, ptr %6, align 4
  br label %156

135:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #10
  %136 = load ptr, ptr %7, align 8, !tbaa !5
  %137 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %136)
  store ptr %137, ptr %9, align 8, !tbaa !5
  br label %138

138:                                              ; preds = %151, %135
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = load i8, ptr %8, align 1, !tbaa !9, !range !11, !noundef !12
  %141 = trunc i8 %140 to i1
  br i1 %141, label %143, label %142

142:                                              ; preds = %138
  store i32 12, ptr %6, align 4
  br label %152

143:                                              ; preds = %138
  %144 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %11, ptr align 4 %144, i64 8, i1 false), !tbaa.struct !13
  %145 = load i64, ptr %11, align 4
  call void @_ZN3HIR8TypeData10make_InferENS0_10Data_InferE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %10, i64 %145)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %10)
          to label %146 unwind label %147

146:                                              ; preds = %143
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %10) #10
  store i32 1, ptr %6, align 4
  br label %152

147:                                              ; preds = %143
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %12, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #10
  br label %1082

151:                                              ; No predecessors!
  store i8 0, ptr %8, align 1, !tbaa !9
  br label %138, !llvm.loop !18

152:                                              ; preds = %146, %142
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  %153 = load i32, ptr %6, align 4
  switch i32 %153, label %156 [
    i32 12, label %154
  ]

154:                                              ; preds = %152
  br label %155

155:                                              ; preds = %154
  store i8 0, ptr %8, align 1, !tbaa !9
  br label %131, !llvm.loop !20

156:                                              ; preds = %152, %134
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #10
  %157 = load i32, ptr %6, align 4
  switch i32 %157, label %1080 [
    i32 9, label %158
  ]

158:                                              ; preds = %156
  br label %1078

159:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #10
  store i8 1, ptr %14, align 1, !tbaa !9
  br label %160

160:                                              ; preds = %182, %159
  %161 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %162 = trunc i8 %161 to i1
  br i1 %162, label %164, label %163

163:                                              ; preds = %160
  store i32 15, ptr %6, align 4
  br label %183

164:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %165)
  store ptr %166, ptr %15, align 8, !tbaa !5
  br label %167

167:                                              ; preds = %178, %164
  %168 = load ptr, ptr %15, align 8, !tbaa !5
  %169 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %170 = trunc i8 %169 to i1
  br i1 %170, label %172, label %171

171:                                              ; preds = %167
  store i32 18, ptr %6, align 4
  br label %179

172:                                              ; preds = %167
  call void @_ZN3HIR8TypeData12make_DivergeENS0_12Data_DivergeE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %16)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %16)
          to label %173 unwind label %174

173:                                              ; preds = %172
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %16) #10
  store i32 1, ptr %6, align 4
  br label %179

174:                                              ; preds = %172
  %175 = landingpad { ptr, i32 }
          cleanup
  %176 = extractvalue { ptr, i32 } %175, 0
  store ptr %176, ptr %12, align 8
  %177 = extractvalue { ptr, i32 } %175, 1
  store i32 %177, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #10
  br label %1082

178:                                              ; No predecessors!
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %167, !llvm.loop !21

179:                                              ; preds = %173, %171
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  %180 = load i32, ptr %6, align 4
  switch i32 %180, label %183 [
    i32 18, label %181
  ]

181:                                              ; preds = %179
  br label %182

182:                                              ; preds = %181
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %160, !llvm.loop !22

183:                                              ; preds = %179, %163
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #10
  %184 = load i32, ptr %6, align 4
  switch i32 %184, label %1080 [
    i32 15, label %185
  ]

185:                                              ; preds = %183
  br label %1078

186:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #10
  store i8 1, ptr %18, align 1, !tbaa !9
  br label %187

187:                                              ; preds = %211, %186
  %188 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %189 = trunc i8 %188 to i1
  br i1 %189, label %191, label %190

190:                                              ; preds = %187
  store i32 21, ptr %6, align 4
  br label %212

191:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #10
  %192 = load ptr, ptr %7, align 8, !tbaa !5
  %193 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %192)
  store ptr %193, ptr %19, align 8, !tbaa !5
  br label %194

194:                                              ; preds = %207, %191
  %195 = load ptr, ptr %19, align 8, !tbaa !5
  %196 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %197 = trunc i8 %196 to i1
  br i1 %197, label %199, label %198

198:                                              ; preds = %194
  store i32 24, ptr %6, align 4
  br label %208

199:                                              ; preds = %194
  %200 = load ptr, ptr %19, align 8, !tbaa !5
  %201 = load i32, ptr %200, align 4, !tbaa !23
  call void @_ZN3HIR8TypeData14make_PrimitiveENS_8CoreTypeE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %20, i32 noundef %201)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %20)
          to label %202 unwind label %203

202:                                              ; preds = %199
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %20) #10
  store i32 1, ptr %6, align 4
  br label %208

203:                                              ; preds = %199
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %12, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #10
  br label %1082

207:                                              ; No predecessors!
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %194, !llvm.loop !25

208:                                              ; preds = %202, %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  %209 = load i32, ptr %6, align 4
  switch i32 %209, label %212 [
    i32 24, label %210
  ]

210:                                              ; preds = %208
  br label %211

211:                                              ; preds = %210
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %187, !llvm.loop !26

212:                                              ; preds = %208, %190
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #10
  %213 = load i32, ptr %6, align 4
  switch i32 %213, label %1080 [
    i32 21, label %214
  ]

214:                                              ; preds = %212
  br label %1078

215:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #10
  store i8 1, ptr %21, align 1, !tbaa !9
  br label %216

216:                                              ; preds = %257, %215
  %217 = load i8, ptr %21, align 1, !tbaa !9, !range !11, !noundef !12
  %218 = trunc i8 %217 to i1
  br i1 %218, label %220, label %219

219:                                              ; preds = %216
  store i32 27, ptr %6, align 4
  br label %258

220:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %221 = load ptr, ptr %7, align 8, !tbaa !5
  %222 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %221)
  store ptr %222, ptr %22, align 8, !tbaa !5
  br label %223

223:                                              ; preds = %252, %220
  %224 = load ptr, ptr %22, align 8, !tbaa !5
  %225 = load i8, ptr %21, align 1, !tbaa !9, !range !11, !noundef !12
  %226 = trunc i8 %225 to i1
  br i1 %226, label %228, label %227

227:                                              ; preds = %223
  store i32 30, ptr %6, align 4
  br label %253

228:                                              ; preds = %223
  %229 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %24, i32 0, i32 0
  %230 = load ptr, ptr %22, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %230, i32 0, i32 0
  call void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %229, ptr noundef nonnull align 8 dereferenceable(88) %231)
  %232 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %24, i32 0, i32 1
  %233 = load ptr, ptr %22, align 8, !tbaa !5
  %234 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %233, i32 0, i32 1
  invoke void @_ZNK3HIR15TypePathBinding5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypePathBinding") align 8 %232, ptr noundef nonnull align 8 dereferenceable(16) %234)
          to label %235 unwind label %239

235:                                              ; preds = %228
  %236 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %24, i32 0, i32 2
  call void @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEC2IS3_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %236) #10
  invoke void @_ZN3HIR8TypeData9make_PathENS_13TypeData_PathE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %23, ptr noundef %24)
          to label %237 unwind label %243

237:                                              ; preds = %235
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %23)
          to label %238 unwind label %247

238:                                              ; preds = %237
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %23) #10
  call void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %24) #10
  store i32 1, ptr %6, align 4
  br label %253

239:                                              ; preds = %228
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %12, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %13, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %229) #10
  br label %255

243:                                              ; preds = %235
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %12, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %13, align 4
  br label %251

247:                                              ; preds = %237
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %12, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %23) #10
  br label %251

251:                                              ; preds = %247, %243
  call void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %24) #10
  br label %255

252:                                              ; No predecessors!
  store i8 0, ptr %21, align 1, !tbaa !9
  br label %223, !llvm.loop !27

253:                                              ; preds = %238, %227
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  %254 = load i32, ptr %6, align 4
  switch i32 %254, label %258 [
    i32 30, label %256
  ]

255:                                              ; preds = %251, %239
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #10
  br label %1082

256:                                              ; preds = %253
  br label %257

257:                                              ; preds = %256
  store i8 0, ptr %21, align 1, !tbaa !9
  br label %216, !llvm.loop !28

258:                                              ; preds = %253, %219
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #10
  %259 = load i32, ptr %6, align 4
  switch i32 %259, label %1080 [
    i32 27, label %260
  ]

260:                                              ; preds = %258
  br label %1078

261:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #10
  store i8 1, ptr %25, align 1, !tbaa !9
  br label %262

262:                                              ; preds = %291, %261
  %263 = load i8, ptr %25, align 1, !tbaa !9, !range !11, !noundef !12
  %264 = trunc i8 %263 to i1
  br i1 %264, label %266, label %265

265:                                              ; preds = %262
  store i32 33, ptr %6, align 4
  br label %292

266:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %267 = load ptr, ptr %7, align 8, !tbaa !5
  %268 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %267)
  store ptr %268, ptr %26, align 8, !tbaa !5
  br label %269

269:                                              ; preds = %287, %266
  %270 = load ptr, ptr %26, align 8, !tbaa !5
  %271 = load i8, ptr %25, align 1, !tbaa !9, !range !11, !noundef !12
  %272 = trunc i8 %271 to i1
  br i1 %272, label %274, label %273

273:                                              ; preds = %269
  store i32 36, ptr %6, align 4
  br label %288

274:                                              ; preds = %269
  %275 = load ptr, ptr %26, align 8, !tbaa !5
  call void @_ZN3HIR10GenericRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(12) %28, ptr noundef nonnull align 8 dereferenceable(12) %275)
  invoke void @_ZN3HIR8TypeData12make_GenericENS_10GenericRefE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %27, ptr noundef %28)
          to label %276 unwind label %278

276:                                              ; preds = %274
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %27)
          to label %277 unwind label %282

277:                                              ; preds = %276
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %27) #10
  call void @_ZN3HIR10GenericRefD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %28) #10
  store i32 1, ptr %6, align 4
  br label %288

278:                                              ; preds = %274
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %12, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %13, align 4
  br label %286

282:                                              ; preds = %276
  %283 = landingpad { ptr, i32 }
          cleanup
  %284 = extractvalue { ptr, i32 } %283, 0
  store ptr %284, ptr %12, align 8
  %285 = extractvalue { ptr, i32 } %283, 1
  store i32 %285, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %27) #10
  br label %286

286:                                              ; preds = %282, %278
  call void @_ZN3HIR10GenericRefD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #10
  br label %1082

287:                                              ; No predecessors!
  store i8 0, ptr %25, align 1, !tbaa !9
  br label %269, !llvm.loop !29

288:                                              ; preds = %277, %273
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  %289 = load i32, ptr %6, align 4
  switch i32 %289, label %292 [
    i32 36, label %290
  ]

290:                                              ; preds = %288
  br label %291

291:                                              ; preds = %290
  store i8 0, ptr %25, align 1, !tbaa !9
  br label %262, !llvm.loop !30

292:                                              ; preds = %288, %265
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #10
  %293 = load i32, ptr %6, align 4
  switch i32 %293, label %1080 [
    i32 33, label %294
  ]

294:                                              ; preds = %292
  br label %1078

295:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #10
  store i8 1, ptr %29, align 1, !tbaa !9
  br label %296

296:                                              ; preds = %377, %295
  %297 = load i8, ptr %29, align 1, !tbaa !9, !range !11, !noundef !12
  %298 = trunc i8 %297 to i1
  br i1 %298, label %300, label %299

299:                                              ; preds = %296
  store i32 39, ptr %6, align 4
  br label %378

300:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  %301 = load ptr, ptr %7, align 8, !tbaa !5
  %302 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %301)
  store ptr %302, ptr %30, align 8, !tbaa !5
  br label %303

303:                                              ; preds = %373, %300
  %304 = load ptr, ptr %30, align 8, !tbaa !5
  %305 = load i8, ptr %29, align 1, !tbaa !9, !range !11, !noundef !12
  %306 = trunc i8 %305 to i1
  br i1 %306, label %308, label %307

307:                                              ; preds = %303
  store i32 42, ptr %6, align 4
  br label %374

308:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 176, ptr %31) #10
  call void @_ZN3HIR20TypeData_TraitObjectC2Ev(ptr noundef nonnull align 8 dereferenceable(172) %31)
  call void @llvm.lifetime.start.p0(i64 144, ptr %32) #10
  %309 = load ptr, ptr %30, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %309, i32 0, i32 0
  invoke void @_ZNK3HIR9TraitPath5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TraitPath") align 8 %32, ptr noundef nonnull align 8 dereferenceable(144) %310)
          to label %311 unwind label %326

311:                                              ; preds = %308
  %312 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %31, i32 0, i32 0
  %313 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR9TraitPathaSEOS0_(ptr noundef nonnull align 8 dereferenceable(144) %312, ptr noundef nonnull align 8 dereferenceable(144) %32)
          to label %314 unwind label %330

314:                                              ; preds = %311
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %32) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr %32) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %315 = load ptr, ptr %30, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %315, i32 0, i32 1
  store ptr %316, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %317 = load ptr, ptr %33, align 8, !tbaa !5
  %318 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %317) #10
  %319 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.146", ptr %34, i32 0, i32 0
  store ptr %318, ptr %319, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #10
  %320 = load ptr, ptr %33, align 8, !tbaa !5
  %321 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %320) #10
  %322 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.146", ptr %35, i32 0, i32 0
  store ptr %321, ptr %322, align 8
  br label %323

323:                                              ; preds = %341, %314
  %324 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %35) #10
  br i1 %324, label %335, label %325

325:                                              ; preds = %323
  store i32 45, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %352

326:                                              ; preds = %308
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %12, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %13, align 4
  br label %334

330:                                              ; preds = %311
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %12, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %13, align 4
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %32) #10
  br label %334

334:                                              ; preds = %330, %326
  call void @llvm.lifetime.end.p0(i64 144, ptr %32) #10
  br label %372

335:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %336 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  store ptr %336, ptr %36, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %31, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #10
  %338 = load ptr, ptr %36, align 8, !tbaa !5
  invoke void @_ZNK3HIR11GenericPath5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericPath") align 8 %37, ptr noundef nonnull align 8 dereferenceable(32) %338)
          to label %339 unwind label %343

339:                                              ; preds = %335
  invoke void @_ZNSt6vectorIN3HIR11GenericPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %337, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %340 unwind label %347

340:                                              ; preds = %339
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %341

341:                                              ; preds = %340
  %342 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  br label %323

343:                                              ; preds = %335
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %12, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %13, align 4
  br label %351

347:                                              ; preds = %339
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %12, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %13, align 4
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  br label %351

351:                                              ; preds = %347, %343
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %372

352:                                              ; preds = %325
  %353 = load ptr, ptr %30, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %353, i32 0, i32 2
  %355 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %31, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %355, ptr align 8 %354, i64 4, i1 false), !tbaa.struct !31
  invoke void @_ZN3HIR20TypeData_TraitObjectC2EOS0_(ptr noundef nonnull align 8 dereferenceable(172) %39, ptr noundef nonnull align 8 dereferenceable(172) %31)
          to label %356 unwind label %359

356:                                              ; preds = %352
  invoke void @_ZN3HIR8TypeData16make_TraitObjectENS_20TypeData_TraitObjectE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %38, ptr noundef %39)
          to label %357 unwind label %363

357:                                              ; preds = %356
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %38)
          to label %358 unwind label %367

358:                                              ; preds = %357
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %38) #10
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %39) #10
  store i32 1, ptr %6, align 4
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %31) #10
  call void @llvm.lifetime.end.p0(i64 176, ptr %31) #10
  br label %374

359:                                              ; preds = %352
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %12, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %13, align 4
  br label %372

363:                                              ; preds = %356
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %12, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %13, align 4
  br label %371

367:                                              ; preds = %357
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %12, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %38) #10
  br label %371

371:                                              ; preds = %367, %363
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %39) #10
  br label %372

372:                                              ; preds = %371, %359, %351, %334
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %31) #10
  call void @llvm.lifetime.end.p0(i64 176, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #10
  br label %1082

373:                                              ; No predecessors!
  store i8 0, ptr %29, align 1, !tbaa !9
  br label %303, !llvm.loop !32

374:                                              ; preds = %358, %307
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  %375 = load i32, ptr %6, align 4
  switch i32 %375, label %378 [
    i32 42, label %376
  ]

376:                                              ; preds = %374
  br label %377

377:                                              ; preds = %376
  store i8 0, ptr %29, align 1, !tbaa !9
  br label %296, !llvm.loop !33

378:                                              ; preds = %374, %299
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #10
  %379 = load i32, ptr %6, align 4
  switch i32 %379, label %1080 [
    i32 39, label %380
  ]

380:                                              ; preds = %378
  br label %1078

381:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #10
  store i8 1, ptr %40, align 1, !tbaa !9
  br label %382

382:                                              ; preds = %636, %381
  %383 = load i8, ptr %40, align 1, !tbaa !9, !range !11, !noundef !12
  %384 = trunc i8 %383 to i1
  br i1 %384, label %386, label %385

385:                                              ; preds = %382
  store i32 47, ptr %6, align 4
  br label %637

386:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %387 = load ptr, ptr %7, align 8, !tbaa !5
  %388 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %387)
  store ptr %388, ptr %41, align 8, !tbaa !5
  br label %389

389:                                              ; preds = %632, %386
  %390 = load ptr, ptr %41, align 8, !tbaa !5
  %391 = load i8, ptr %40, align 1, !tbaa !9, !range !11, !noundef !12
  %392 = trunc i8 %391 to i1
  br i1 %392, label %394, label %393

393:                                              ; preds = %389
  store i32 50, ptr %6, align 4
  br label %633

394:                                              ; preds = %389
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #10
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #10
  %395 = load ptr, ptr %41, align 8, !tbaa !5
  %396 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %395, i32 0, i32 1
  %397 = call noundef i64 @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %396) #10
  invoke void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %42, i64 noundef %397)
          to label %398 unwind label %410

398:                                              ; preds = %394
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #10
  %399 = load ptr, ptr %41, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %399, i32 0, i32 1
  store ptr %400, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %401 = load ptr, ptr %43, align 8, !tbaa !5
  %402 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %401) #10
  %403 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.147", ptr %44, i32 0, i32 0
  store ptr %402, ptr %403, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  %404 = load ptr, ptr %43, align 8, !tbaa !5
  %405 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %404) #10
  %406 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.147", ptr %45, i32 0, i32 0
  store ptr %405, ptr %406, align 8
  br label %407

407:                                              ; preds = %419, %398
  %408 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %45) #10
  br i1 %408, label %414, label %409

409:                                              ; preds = %407
  store i32 53, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  br label %430

410:                                              ; preds = %394
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %12, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %13, align 4
  br label %631

414:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %415 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %44) #10
  store ptr %415, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 144, ptr %47) #10
  %416 = load ptr, ptr %46, align 8, !tbaa !5
  invoke void @_ZNK3HIR9TraitPath5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TraitPath") align 8 %47, ptr noundef nonnull align 8 dereferenceable(144) %416)
          to label %417 unwind label %421

417:                                              ; preds = %414
  invoke void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %42, ptr noundef nonnull align 8 dereferenceable(144) %47)
          to label %418 unwind label %425

418:                                              ; preds = %417
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %47) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  br label %419

419:                                              ; preds = %418
  %420 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %44) #10
  br label %407

421:                                              ; preds = %414
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %12, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %13, align 4
  br label %429

425:                                              ; preds = %417
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %12, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %13, align 4
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %47) #10
  br label %429

429:                                              ; preds = %425, %421
  call void @llvm.lifetime.end.p0(i64 144, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  br label %631

430:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 104, ptr %48) #10
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %48)
          to label %431 unwind label %436

431:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #10
  store i8 1, ptr %49, align 1, !tbaa !9
  br label %432

432:                                              ; preds = %600, %431
  %433 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %434 = trunc i8 %433 to i1
  br i1 %434, label %440, label %435

435:                                              ; preds = %432
  store i32 55, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #10
  br label %601

436:                                              ; preds = %430
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %12, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %13, align 4
  br label %630

440:                                              ; preds = %432
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #10
  %441 = load ptr, ptr %41, align 8, !tbaa !5
  %442 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %441, i32 0, i32 3
  store ptr %442, ptr %50, align 8, !tbaa !5
  br label %443

443:                                              ; preds = %597, %440
  %444 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %445 = trunc i8 %444 to i1
  br i1 %445, label %447, label %446

446:                                              ; preds = %443
  store i32 58, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  br label %599

447:                                              ; preds = %443
  %448 = load ptr, ptr %50, align 8, !tbaa !5
  %449 = invoke noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %448)
          to label %450 unwind label %451

450:                                              ; preds = %447
  switch i32 %449, label %596 [
    i32 0, label %455
    i32 1, label %456
    i32 2, label %505
    i32 3, label %548
  ]

451:                                              ; preds = %447
  %452 = landingpad { ptr, i32 }
          cleanup
  %453 = extractvalue { ptr, i32 } %452, 0
  store ptr %453, ptr %12, align 8
  %454 = extractvalue { ptr, i32 } %452, 1
  store i32 %454, ptr %13, align 4
  br label %598

455:                                              ; preds = %450
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 1206, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef13clone_shallowEv) #11
  unreachable

456:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 1, ptr %51) #10
  store i8 1, ptr %51, align 1, !tbaa !9
  br label %457

457:                                              ; preds = %503, %456
  %458 = load i8, ptr %51, align 1, !tbaa !9, !range !11, !noundef !12
  %459 = trunc i8 %458 to i1
  br i1 %459, label %461, label %460

460:                                              ; preds = %457
  store i32 62, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #10
  br label %504

461:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #10
  %462 = load ptr, ptr %50, align 8, !tbaa !5
  %463 = invoke noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %462)
          to label %464 unwind label %470

464:                                              ; preds = %461
  store ptr %463, ptr %52, align 8, !tbaa !5
  br label %465

465:                                              ; preds = %486, %464
  %466 = load ptr, ptr %52, align 8, !tbaa !5
  %467 = load i8, ptr %51, align 1, !tbaa !9, !range !11, !noundef !12
  %468 = trunc i8 %467 to i1
  br i1 %468, label %474, label %469

469:                                              ; preds = %465
  store i32 65, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  br label %502

470:                                              ; preds = %461
  %471 = landingpad { ptr, i32 }
          cleanup
  %472 = extractvalue { ptr, i32 } %471, 0
  store ptr %472, ptr %12, align 8
  %473 = extractvalue { ptr, i32 } %471, 1
  store i32 %473, ptr %13, align 4
  br label %501

474:                                              ; preds = %465
  call void @llvm.lifetime.start.p0(i64 104, ptr %53) #10
  %475 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %54, i32 0, i32 0
  %476 = load ptr, ptr %52, align 8, !tbaa !5
  %477 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %476, i32 0, i32 0
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %475, ptr noundef nonnull align 8 dereferenceable(88) %477)
          to label %478 unwind label %487

478:                                              ; preds = %474
  %479 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %54, i32 0, i32 1
  %480 = load ptr, ptr %52, align 8, !tbaa !5
  %481 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %480, i32 0, i32 1
  %482 = load i32, ptr %481, align 8, !tbaa !34
  store i32 %482, ptr %479, align 8, !tbaa !34
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS0_8Data_FcnE(ptr noundef nonnull align 8 dereferenceable(104) %53, ptr noundef %54)
          to label %483 unwind label %491

483:                                              ; preds = %478
  %484 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %48, ptr noundef nonnull align 8 dereferenceable(104) %53)
          to label %485 unwind label %495

485:                                              ; preds = %483
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %53) #10
  call void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92) %54) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %53) #10
  br label %486

486:                                              ; preds = %485
  store i8 0, ptr %51, align 1, !tbaa !9
  br label %465, !llvm.loop !39

487:                                              ; preds = %474
  %488 = landingpad { ptr, i32 }
          cleanup
  %489 = extractvalue { ptr, i32 } %488, 0
  store ptr %489, ptr %12, align 8
  %490 = extractvalue { ptr, i32 } %488, 1
  store i32 %490, ptr %13, align 4
  br label %500

491:                                              ; preds = %478
  %492 = landingpad { ptr, i32 }
          cleanup
  %493 = extractvalue { ptr, i32 } %492, 0
  store ptr %493, ptr %12, align 8
  %494 = extractvalue { ptr, i32 } %492, 1
  store i32 %494, ptr %13, align 4
  br label %499

495:                                              ; preds = %483
  %496 = landingpad { ptr, i32 }
          cleanup
  %497 = extractvalue { ptr, i32 } %496, 0
  store ptr %497, ptr %12, align 8
  %498 = extractvalue { ptr, i32 } %496, 1
  store i32 %498, ptr %13, align 4
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %53) #10
  br label %499

499:                                              ; preds = %495, %491
  call void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92) %54) #10
  br label %500

500:                                              ; preds = %499, %487
  call void @llvm.lifetime.end.p0(i64 104, ptr %53) #10
  br label %501

501:                                              ; preds = %500, %470
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #10
  br label %598

502:                                              ; preds = %469
  br label %503

503:                                              ; preds = %502
  store i8 0, ptr %51, align 1, !tbaa !9
  br label %457, !llvm.loop !40

504:                                              ; preds = %460
  br label %596

505:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #10
  store i8 1, ptr %55, align 1, !tbaa !9
  br label %506

506:                                              ; preds = %546, %505
  %507 = load i8, ptr %55, align 1, !tbaa !9, !range !11, !noundef !12
  %508 = trunc i8 %507 to i1
  br i1 %508, label %510, label %509

509:                                              ; preds = %506
  store i32 68, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #10
  br label %547

510:                                              ; preds = %506
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #10
  %511 = load ptr, ptr %50, align 8, !tbaa !5
  %512 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %511)
          to label %513 unwind label %519

513:                                              ; preds = %510
  store ptr %512, ptr %56, align 8, !tbaa !5
  br label %514

514:                                              ; preds = %529, %513
  %515 = load ptr, ptr %56, align 8, !tbaa !5
  %516 = load i8, ptr %55, align 1, !tbaa !9, !range !11, !noundef !12
  %517 = trunc i8 %516 to i1
  br i1 %517, label %523, label %518

518:                                              ; preds = %514
  store i32 71, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  br label %545

519:                                              ; preds = %510
  %520 = landingpad { ptr, i32 }
          cleanup
  %521 = extractvalue { ptr, i32 } %520, 0
  store ptr %521, ptr %12, align 8
  %522 = extractvalue { ptr, i32 } %520, 1
  store i32 %522, ptr %13, align 4
  br label %544

523:                                              ; preds = %514
  call void @llvm.lifetime.start.p0(i64 104, ptr %57) #10
  %524 = load ptr, ptr %56, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %58, ptr noundef nonnull align 8 dereferenceable(8) %524)
          to label %525 unwind label %530

525:                                              ; preds = %523
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(104) %57, ptr noundef %58)
          to label %526 unwind label %534

526:                                              ; preds = %525
  %527 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %48, ptr noundef nonnull align 8 dereferenceable(104) %57)
          to label %528 unwind label %538

528:                                              ; preds = %526
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %57) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %57) #10
  br label %529

529:                                              ; preds = %528
  store i8 0, ptr %55, align 1, !tbaa !9
  br label %514, !llvm.loop !41

530:                                              ; preds = %523
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %12, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %13, align 4
  br label %543

534:                                              ; preds = %525
  %535 = landingpad { ptr, i32 }
          cleanup
  %536 = extractvalue { ptr, i32 } %535, 0
  store ptr %536, ptr %12, align 8
  %537 = extractvalue { ptr, i32 } %535, 1
  store i32 %537, ptr %13, align 4
  br label %542

538:                                              ; preds = %526
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %12, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %13, align 4
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %57) #10
  br label %542

542:                                              ; preds = %538, %534
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #10
  br label %543

543:                                              ; preds = %542, %530
  call void @llvm.lifetime.end.p0(i64 104, ptr %57) #10
  br label %544

544:                                              ; preds = %543, %519
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #10
  br label %598

545:                                              ; preds = %518
  br label %546

546:                                              ; preds = %545
  store i8 0, ptr %55, align 1, !tbaa !9
  br label %506, !llvm.loop !42

547:                                              ; preds = %509
  br label %596

548:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #10
  store i8 1, ptr %59, align 1, !tbaa !9
  br label %549

549:                                              ; preds = %594, %548
  %550 = load i8, ptr %59, align 1, !tbaa !9, !range !11, !noundef !12
  %551 = trunc i8 %550 to i1
  br i1 %551, label %553, label %552

552:                                              ; preds = %549
  store i32 74, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #10
  br label %595

553:                                              ; preds = %549
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #10
  %554 = load ptr, ptr %50, align 8, !tbaa !5
  %555 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %554)
          to label %556 unwind label %562

556:                                              ; preds = %553
  store ptr %555, ptr %60, align 8, !tbaa !5
  br label %557

557:                                              ; preds = %577, %556
  %558 = load ptr, ptr %60, align 8, !tbaa !5
  %559 = load i8, ptr %59, align 1, !tbaa !9, !range !11, !noundef !12
  %560 = trunc i8 %559 to i1
  br i1 %560, label %566, label %561

561:                                              ; preds = %557
  store i32 77, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  br label %593

562:                                              ; preds = %553
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %12, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %13, align 4
  br label %592

566:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 104, ptr %61) #10
  %567 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %62, i32 0, i32 0
  %568 = load ptr, ptr %60, align 8, !tbaa !5
  %569 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %568, i32 0, i32 0
  invoke void @_ZNK3HIR10PathParams5cloneEv(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8 %567, ptr noundef nonnull align 8 dereferenceable(24) %569)
          to label %570 unwind label %578

570:                                              ; preds = %566
  %571 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %62, i32 0, i32 1
  %572 = load ptr, ptr %60, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %572, i32 0, i32 1
  call void @_ZNSt10shared_ptrIN3HIR30TypeData_ErasedType_AliasInnerEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %571, ptr noundef nonnull align 8 dereferenceable(16) %573) #10
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS0_10Data_AliasE(ptr noundef nonnull align 8 dereferenceable(104) %61, ptr noundef %62)
          to label %574 unwind label %582

574:                                              ; preds = %570
  %575 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %48, ptr noundef nonnull align 8 dereferenceable(104) %61)
          to label %576 unwind label %586

576:                                              ; preds = %574
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %61) #10
  call void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %62) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %61) #10
  br label %577

577:                                              ; preds = %576
  store i8 0, ptr %59, align 1, !tbaa !9
  br label %557, !llvm.loop !43

578:                                              ; preds = %566
  %579 = landingpad { ptr, i32 }
          cleanup
  %580 = extractvalue { ptr, i32 } %579, 0
  store ptr %580, ptr %12, align 8
  %581 = extractvalue { ptr, i32 } %579, 1
  store i32 %581, ptr %13, align 4
  br label %591

582:                                              ; preds = %570
  %583 = landingpad { ptr, i32 }
          cleanup
  %584 = extractvalue { ptr, i32 } %583, 0
  store ptr %584, ptr %12, align 8
  %585 = extractvalue { ptr, i32 } %583, 1
  store i32 %585, ptr %13, align 4
  br label %590

586:                                              ; preds = %574
  %587 = landingpad { ptr, i32 }
          cleanup
  %588 = extractvalue { ptr, i32 } %587, 0
  store ptr %588, ptr %12, align 8
  %589 = extractvalue { ptr, i32 } %587, 1
  store i32 %589, ptr %13, align 4
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %61) #10
  br label %590

590:                                              ; preds = %586, %582
  call void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %62) #10
  br label %591

591:                                              ; preds = %590, %578
  call void @llvm.lifetime.end.p0(i64 104, ptr %61) #10
  br label %592

592:                                              ; preds = %591, %562
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #10
  br label %598

593:                                              ; preds = %561
  br label %594

594:                                              ; preds = %593
  store i8 0, ptr %59, align 1, !tbaa !9
  br label %549, !llvm.loop !44

595:                                              ; preds = %552
  br label %596

596:                                              ; preds = %595, %547, %504, %450
  br label %597

597:                                              ; preds = %596
  store i8 0, ptr %49, align 1, !tbaa !9
  br label %443, !llvm.loop !45

598:                                              ; preds = %592, %544, %501, %451
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #10
  br label %629

599:                                              ; preds = %446
  br label %600

600:                                              ; preds = %599
  store i8 0, ptr %49, align 1, !tbaa !9
  br label %432, !llvm.loop !46

601:                                              ; preds = %435
  %602 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %64, i32 0, i32 0
  %603 = load ptr, ptr %41, align 8, !tbaa !5
  %604 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %603, i32 0, i32 0
  %605 = load i8, ptr %604, align 8, !tbaa !47, !range !11, !noundef !12
  %606 = trunc i8 %605 to i1
  %607 = zext i1 %606 to i8
  store i8 %607, ptr %602, align 8, !tbaa !47
  %608 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %64, i32 0, i32 1
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %608, ptr noundef nonnull align 8 dereferenceable(24) %42) #10
  %609 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %64, i32 0, i32 2
  %610 = load ptr, ptr %41, align 8, !tbaa !5
  %611 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %610, i32 0, i32 2
  invoke void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %609, ptr noundef nonnull align 8 dereferenceable(24) %611)
          to label %612 unwind label %616

612:                                              ; preds = %601
  %613 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %64, i32 0, i32 3
  call void @_ZN3HIR25TypeData_ErasedType_InnerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(104) %613, ptr noundef nonnull align 8 dereferenceable(104) %48) #10
  invoke void @_ZN3HIR8TypeData15make_ErasedTypeENS_19TypeData_ErasedTypeE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %63, ptr noundef %64)
          to label %614 unwind label %620

614:                                              ; preds = %612
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %63)
          to label %615 unwind label %624

615:                                              ; preds = %614
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %63) #10
  call void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160) %64) #10
  store i32 1, ptr %6, align 4
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %48) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %48) #10
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #10
  br label %633

616:                                              ; preds = %601
  %617 = landingpad { ptr, i32 }
          cleanup
  %618 = extractvalue { ptr, i32 } %617, 0
  store ptr %618, ptr %12, align 8
  %619 = extractvalue { ptr, i32 } %617, 1
  store i32 %619, ptr %13, align 4
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %608) #10
  br label %629

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

624:                                              ; preds = %614
  %625 = landingpad { ptr, i32 }
          cleanup
  %626 = extractvalue { ptr, i32 } %625, 0
  store ptr %626, ptr %12, align 8
  %627 = extractvalue { ptr, i32 } %625, 1
  store i32 %627, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %63) #10
  br label %628

628:                                              ; preds = %624, %620
  call void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160) %64) #10
  br label %629

629:                                              ; preds = %628, %616, %598
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %48) #10
  br label %630

630:                                              ; preds = %629, %436
  call void @llvm.lifetime.end.p0(i64 104, ptr %48) #10
  br label %631

631:                                              ; preds = %630, %429, %410
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #10
  br label %1082

632:                                              ; No predecessors!
  store i8 0, ptr %40, align 1, !tbaa !9
  br label %389, !llvm.loop !59

633:                                              ; preds = %615, %393
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  %634 = load i32, ptr %6, align 4
  switch i32 %634, label %637 [
    i32 50, label %635
  ]

635:                                              ; preds = %633
  br label %636

636:                                              ; preds = %635
  store i8 0, ptr %40, align 1, !tbaa !9
  br label %382, !llvm.loop !60

637:                                              ; preds = %633, %385
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #10
  %638 = load i32, ptr %6, align 4
  switch i32 %638, label %1080 [
    i32 47, label %639
  ]

639:                                              ; preds = %637
  br label %1078

640:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #10
  store i8 1, ptr %65, align 1, !tbaa !9
  br label %641

641:                                              ; preds = %681, %640
  %642 = load i8, ptr %65, align 1, !tbaa !9, !range !11, !noundef !12
  %643 = trunc i8 %642 to i1
  br i1 %643, label %645, label %644

644:                                              ; preds = %641
  store i32 80, ptr %6, align 4
  br label %682

645:                                              ; preds = %641
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #10
  %646 = load ptr, ptr %7, align 8, !tbaa !5
  %647 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %646)
  store ptr %647, ptr %66, align 8, !tbaa !5
  br label %648

648:                                              ; preds = %676, %645
  %649 = load ptr, ptr %66, align 8, !tbaa !5
  %650 = load i8, ptr %65, align 1, !tbaa !9, !range !11, !noundef !12
  %651 = trunc i8 %650 to i1
  br i1 %651, label %653, label %652

652:                                              ; preds = %648
  store i32 83, ptr %6, align 4
  br label %677

653:                                              ; preds = %648
  %654 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %68, i32 0, i32 0
  %655 = load ptr, ptr %66, align 8, !tbaa !5
  %656 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %655, i32 0, i32 0
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %654, ptr noundef nonnull align 8 dereferenceable(8) %656)
  %657 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %68, i32 0, i32 1
  %658 = load ptr, ptr %66, align 8, !tbaa !5
  %659 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %658, i32 0, i32 1
  invoke void @_ZNK3HIR9ArraySize5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::ArraySize") align 8 %657, ptr noundef nonnull align 8 dereferenceable(32) %659)
          to label %660 unwind label %663

660:                                              ; preds = %653
  invoke void @_ZN3HIR8TypeData10make_ArrayENS0_10Data_ArrayE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %67, ptr noundef %68)
          to label %661 unwind label %667

661:                                              ; preds = %660
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %67)
          to label %662 unwind label %671

662:                                              ; preds = %661
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %67) #10
  call void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %68) #10
  store i32 1, ptr %6, align 4
  br label %677

663:                                              ; preds = %653
  %664 = landingpad { ptr, i32 }
          cleanup
  %665 = extractvalue { ptr, i32 } %664, 0
  store ptr %665, ptr %12, align 8
  %666 = extractvalue { ptr, i32 } %664, 1
  store i32 %666, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %654) #10
  br label %679

667:                                              ; preds = %660
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %12, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %13, align 4
  br label %675

671:                                              ; preds = %661
  %672 = landingpad { ptr, i32 }
          cleanup
  %673 = extractvalue { ptr, i32 } %672, 0
  store ptr %673, ptr %12, align 8
  %674 = extractvalue { ptr, i32 } %672, 1
  store i32 %674, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %67) #10
  br label %675

675:                                              ; preds = %671, %667
  call void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %68) #10
  br label %679

676:                                              ; No predecessors!
  store i8 0, ptr %65, align 1, !tbaa !9
  br label %648, !llvm.loop !61

677:                                              ; preds = %662, %652
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #10
  %678 = load i32, ptr %6, align 4
  switch i32 %678, label %682 [
    i32 83, label %680
  ]

679:                                              ; preds = %675, %663
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #10
  br label %1082

680:                                              ; preds = %677
  br label %681

681:                                              ; preds = %680
  store i8 0, ptr %65, align 1, !tbaa !9
  br label %641, !llvm.loop !62

682:                                              ; preds = %677, %644
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #10
  %683 = load i32, ptr %6, align 4
  switch i32 %683, label %1080 [
    i32 80, label %684
  ]

684:                                              ; preds = %682
  br label %1078

685:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %69) #10
  store i8 1, ptr %69, align 1, !tbaa !9
  br label %686

686:                                              ; preds = %717, %685
  %687 = load i8, ptr %69, align 1, !tbaa !9, !range !11, !noundef !12
  %688 = trunc i8 %687 to i1
  br i1 %688, label %690, label %689

689:                                              ; preds = %686
  store i32 86, ptr %6, align 4
  br label %718

690:                                              ; preds = %686
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #10
  %691 = load ptr, ptr %7, align 8, !tbaa !5
  %692 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %691)
  store ptr %692, ptr %70, align 8, !tbaa !5
  br label %693

693:                                              ; preds = %713, %690
  %694 = load ptr, ptr %70, align 8, !tbaa !5
  %695 = load i8, ptr %69, align 1, !tbaa !9, !range !11, !noundef !12
  %696 = trunc i8 %695 to i1
  br i1 %696, label %698, label %697

697:                                              ; preds = %693
  store i32 89, ptr %6, align 4
  br label %714

698:                                              ; preds = %693
  %699 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %72, i32 0, i32 0
  %700 = load ptr, ptr %70, align 8, !tbaa !5
  %701 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %700, i32 0, i32 0
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %699, ptr noundef nonnull align 8 dereferenceable(8) %701)
  invoke void @_ZN3HIR8TypeData10make_SliceENS0_10Data_SliceE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %71, ptr noundef %72)
          to label %702 unwind label %704

702:                                              ; preds = %698
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %71)
          to label %703 unwind label %708

703:                                              ; preds = %702
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %71) #10
  call void @_ZN3HIR8TypeData10Data_SliceD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %72) #10
  store i32 1, ptr %6, align 4
  br label %714

704:                                              ; preds = %698
  %705 = landingpad { ptr, i32 }
          cleanup
  %706 = extractvalue { ptr, i32 } %705, 0
  store ptr %706, ptr %12, align 8
  %707 = extractvalue { ptr, i32 } %705, 1
  store i32 %707, ptr %13, align 4
  br label %712

708:                                              ; preds = %702
  %709 = landingpad { ptr, i32 }
          cleanup
  %710 = extractvalue { ptr, i32 } %709, 0
  store ptr %710, ptr %12, align 8
  %711 = extractvalue { ptr, i32 } %709, 1
  store i32 %711, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %71) #10
  br label %712

712:                                              ; preds = %708, %704
  call void @_ZN3HIR8TypeData10Data_SliceD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %72) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #10
  br label %1082

713:                                              ; No predecessors!
  store i8 0, ptr %69, align 1, !tbaa !9
  br label %693, !llvm.loop !63

714:                                              ; preds = %703, %697
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  %715 = load i32, ptr %6, align 4
  switch i32 %715, label %718 [
    i32 89, label %716
  ]

716:                                              ; preds = %714
  br label %717

717:                                              ; preds = %716
  store i8 0, ptr %69, align 1, !tbaa !9
  br label %686, !llvm.loop !64

718:                                              ; preds = %714, %689
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #10
  %719 = load i32, ptr %6, align 4
  switch i32 %719, label %1080 [
    i32 86, label %720
  ]

720:                                              ; preds = %718
  br label %1078

721:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %73) #10
  store i8 1, ptr %73, align 1, !tbaa !9
  br label %722

722:                                              ; preds = %778, %721
  %723 = load i8, ptr %73, align 1, !tbaa !9, !range !11, !noundef !12
  %724 = trunc i8 %723 to i1
  br i1 %724, label %726, label %725

725:                                              ; preds = %722
  store i32 92, ptr %6, align 4
  br label %779

726:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #10
  %727 = load ptr, ptr %7, align 8, !tbaa !5
  %728 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %727)
  store ptr %728, ptr %74, align 8, !tbaa !5
  br label %729

729:                                              ; preds = %774, %726
  %730 = load ptr, ptr %74, align 8, !tbaa !5
  %731 = load i8, ptr %73, align 1, !tbaa !9, !range !11, !noundef !12
  %732 = trunc i8 %731 to i1
  br i1 %732, label %734, label %733

733:                                              ; preds = %729
  store i32 95, ptr %6, align 4
  br label %775

734:                                              ; preds = %729
  call void @llvm.lifetime.start.p0(i64 24, ptr %75) #10
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #10
  %735 = load ptr, ptr %74, align 8, !tbaa !5
  store ptr %735, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #10
  %736 = load ptr, ptr %76, align 8, !tbaa !5
  %737 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %736) #10
  %738 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.149", ptr %77, i32 0, i32 0
  store ptr %737, ptr %738, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #10
  %739 = load ptr, ptr %76, align 8, !tbaa !5
  %740 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %739) #10
  %741 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.149", ptr %78, i32 0, i32 0
  store ptr %740, ptr %741, align 8
  br label %742

742:                                              ; preds = %750, %734
  %743 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %77, ptr noundef nonnull align 8 dereferenceable(8) %78) #10
  br i1 %743, label %745, label %744

744:                                              ; preds = %742
  store i32 98, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #10
  br label %761

745:                                              ; preds = %742
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #10
  %746 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %77) #10
  store ptr %746, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #10
  %747 = load ptr, ptr %79, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %80, ptr noundef nonnull align 8 dereferenceable(8) %747)
          to label %748 unwind label %752

748:                                              ; preds = %745
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %75, ptr noundef nonnull align 8 dereferenceable(8) %80)
          to label %749 unwind label %756

749:                                              ; preds = %748
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #10
  br label %750

750:                                              ; preds = %749
  %751 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %77) #10
  br label %742

752:                                              ; preds = %745
  %753 = landingpad { ptr, i32 }
          cleanup
  %754 = extractvalue { ptr, i32 } %753, 0
  store ptr %754, ptr %12, align 8
  %755 = extractvalue { ptr, i32 } %753, 1
  store i32 %755, ptr %13, align 4
  br label %760

756:                                              ; preds = %748
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %12, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #10
  br label %760

760:                                              ; preds = %756, %752
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #10
  br label %773

761:                                              ; preds = %744
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %82, ptr noundef nonnull align 8 dereferenceable(24) %75) #10
  invoke void @_ZN3HIR8TypeData10make_TupleESt6vectorINS_7TypeRefESaIS2_EE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %81, ptr noundef %82)
          to label %762 unwind label %764

762:                                              ; preds = %761
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %81)
          to label %763 unwind label %768

763:                                              ; preds = %762
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %81) #10
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %82) #10
  store i32 1, ptr %6, align 4
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %75) #10
  br label %775

764:                                              ; preds = %761
  %765 = landingpad { ptr, i32 }
          cleanup
  %766 = extractvalue { ptr, i32 } %765, 0
  store ptr %766, ptr %12, align 8
  %767 = extractvalue { ptr, i32 } %765, 1
  store i32 %767, ptr %13, align 4
  br label %772

768:                                              ; preds = %762
  %769 = landingpad { ptr, i32 }
          cleanup
  %770 = extractvalue { ptr, i32 } %769, 0
  store ptr %770, ptr %12, align 8
  %771 = extractvalue { ptr, i32 } %769, 1
  store i32 %771, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %81) #10
  br label %772

772:                                              ; preds = %768, %764
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %82) #10
  br label %773

773:                                              ; preds = %772, %760
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #10
  br label %1082

774:                                              ; No predecessors!
  store i8 0, ptr %73, align 1, !tbaa !9
  br label %729, !llvm.loop !65

775:                                              ; preds = %763, %733
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #10
  %776 = load i32, ptr %6, align 4
  switch i32 %776, label %779 [
    i32 95, label %777
  ]

777:                                              ; preds = %775
  br label %778

778:                                              ; preds = %777
  store i8 0, ptr %73, align 1, !tbaa !9
  br label %722, !llvm.loop !66

779:                                              ; preds = %775, %725
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #10
  %780 = load i32, ptr %6, align 4
  switch i32 %780, label %1080 [
    i32 92, label %781
  ]

781:                                              ; preds = %779
  br label %1078

782:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %83) #10
  store i8 1, ptr %83, align 1, !tbaa !9
  br label %783

783:                                              ; preds = %821, %782
  %784 = load i8, ptr %83, align 1, !tbaa !9, !range !11, !noundef !12
  %785 = trunc i8 %784 to i1
  br i1 %785, label %787, label %786

786:                                              ; preds = %783
  store i32 100, ptr %6, align 4
  br label %822

787:                                              ; preds = %783
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #10
  %788 = load ptr, ptr %7, align 8, !tbaa !5
  %789 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %788)
  store ptr %789, ptr %84, align 8, !tbaa !5
  br label %790

790:                                              ; preds = %817, %787
  %791 = load ptr, ptr %84, align 8, !tbaa !5
  %792 = load i8, ptr %83, align 1, !tbaa !9, !range !11, !noundef !12
  %793 = trunc i8 %792 to i1
  br i1 %793, label %795, label %794

794:                                              ; preds = %790
  store i32 103, ptr %6, align 4
  br label %818

795:                                              ; preds = %790
  %796 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %86, i32 0, i32 0
  %797 = load ptr, ptr %84, align 8, !tbaa !5
  %798 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %797, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %796, ptr align 8 %798, i64 4, i1 false), !tbaa.struct !31
  %799 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %86, i32 0, i32 1
  %800 = load ptr, ptr %84, align 8, !tbaa !5
  %801 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %800, i32 0, i32 1
  %802 = load i32, ptr %801, align 4, !tbaa !67
  store i32 %802, ptr %799, align 4, !tbaa !67
  %803 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %86, i32 0, i32 2
  %804 = load ptr, ptr %84, align 8, !tbaa !5
  %805 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %804, i32 0, i32 2
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %803, ptr noundef nonnull align 8 dereferenceable(8) %805)
  invoke void @_ZN3HIR8TypeData11make_BorrowENS0_11Data_BorrowE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %85, ptr noundef %86)
          to label %806 unwind label %808

806:                                              ; preds = %795
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %85)
          to label %807 unwind label %812

807:                                              ; preds = %806
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %85) #10
  call void @_ZN3HIR8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %86) #10
  store i32 1, ptr %6, align 4
  br label %818

808:                                              ; preds = %795
  %809 = landingpad { ptr, i32 }
          cleanup
  %810 = extractvalue { ptr, i32 } %809, 0
  store ptr %810, ptr %12, align 8
  %811 = extractvalue { ptr, i32 } %809, 1
  store i32 %811, ptr %13, align 4
  br label %816

812:                                              ; preds = %806
  %813 = landingpad { ptr, i32 }
          cleanup
  %814 = extractvalue { ptr, i32 } %813, 0
  store ptr %814, ptr %12, align 8
  %815 = extractvalue { ptr, i32 } %813, 1
  store i32 %815, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %85) #10
  br label %816

816:                                              ; preds = %812, %808
  call void @_ZN3HIR8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %86) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #10
  br label %1082

817:                                              ; No predecessors!
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %790, !llvm.loop !72

818:                                              ; preds = %807, %794
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #10
  %819 = load i32, ptr %6, align 4
  switch i32 %819, label %822 [
    i32 103, label %820
  ]

820:                                              ; preds = %818
  br label %821

821:                                              ; preds = %820
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %783, !llvm.loop !73

822:                                              ; preds = %818, %786
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #10
  %823 = load i32, ptr %6, align 4
  switch i32 %823, label %1080 [
    i32 100, label %824
  ]

824:                                              ; preds = %822
  br label %1078

825:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %87) #10
  store i8 1, ptr %87, align 1, !tbaa !9
  br label %826

826:                                              ; preds = %861, %825
  %827 = load i8, ptr %87, align 1, !tbaa !9, !range !11, !noundef !12
  %828 = trunc i8 %827 to i1
  br i1 %828, label %830, label %829

829:                                              ; preds = %826
  store i32 106, ptr %6, align 4
  br label %862

830:                                              ; preds = %826
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #10
  %831 = load ptr, ptr %7, align 8, !tbaa !5
  %832 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %831)
  store ptr %832, ptr %88, align 8, !tbaa !5
  br label %833

833:                                              ; preds = %857, %830
  %834 = load ptr, ptr %88, align 8, !tbaa !5
  %835 = load i8, ptr %87, align 1, !tbaa !9, !range !11, !noundef !12
  %836 = trunc i8 %835 to i1
  br i1 %836, label %838, label %837

837:                                              ; preds = %833
  store i32 109, ptr %6, align 4
  br label %858

838:                                              ; preds = %833
  %839 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %90, i32 0, i32 0
  %840 = load ptr, ptr %88, align 8, !tbaa !5
  %841 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %840, i32 0, i32 0
  %842 = load i32, ptr %841, align 8, !tbaa !74
  store i32 %842, ptr %839, align 8, !tbaa !74
  %843 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %90, i32 0, i32 1
  %844 = load ptr, ptr %88, align 8, !tbaa !5
  %845 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %844, i32 0, i32 1
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %843, ptr noundef nonnull align 8 dereferenceable(8) %845)
  invoke void @_ZN3HIR8TypeData12make_PointerENS0_12Data_PointerE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %89, ptr noundef %90)
          to label %846 unwind label %848

846:                                              ; preds = %838
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %89)
          to label %847 unwind label %852

847:                                              ; preds = %846
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %89) #10
  call void @_ZN3HIR8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %90) #10
  store i32 1, ptr %6, align 4
  br label %858

848:                                              ; preds = %838
  %849 = landingpad { ptr, i32 }
          cleanup
  %850 = extractvalue { ptr, i32 } %849, 0
  store ptr %850, ptr %12, align 8
  %851 = extractvalue { ptr, i32 } %849, 1
  store i32 %851, ptr %13, align 4
  br label %856

852:                                              ; preds = %846
  %853 = landingpad { ptr, i32 }
          cleanup
  %854 = extractvalue { ptr, i32 } %853, 0
  store ptr %854, ptr %12, align 8
  %855 = extractvalue { ptr, i32 } %853, 1
  store i32 %855, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %89) #10
  br label %856

856:                                              ; preds = %852, %848
  call void @_ZN3HIR8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %90) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #10
  br label %1082

857:                                              ; No predecessors!
  store i8 0, ptr %87, align 1, !tbaa !9
  br label %833, !llvm.loop !76

858:                                              ; preds = %847, %837
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #10
  %859 = load i32, ptr %6, align 4
  switch i32 %859, label %862 [
    i32 109, label %860
  ]

860:                                              ; preds = %858
  br label %861

861:                                              ; preds = %860
  store i8 0, ptr %87, align 1, !tbaa !9
  br label %826, !llvm.loop !77

862:                                              ; preds = %858, %829
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #10
  %863 = load i32, ptr %6, align 4
  switch i32 %863, label %1080 [
    i32 106, label %864
  ]

864:                                              ; preds = %862
  br label %1078

865:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %91) #10
  store i8 1, ptr %91, align 1, !tbaa !9
  br label %866

866:                                              ; preds = %906, %865
  %867 = load i8, ptr %91, align 1, !tbaa !9, !range !11, !noundef !12
  %868 = trunc i8 %867 to i1
  br i1 %868, label %870, label %869

869:                                              ; preds = %866
  store i32 112, ptr %6, align 4
  br label %907

870:                                              ; preds = %866
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #10
  %871 = load ptr, ptr %7, align 8, !tbaa !5
  %872 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %871)
  store ptr %872, ptr %92, align 8, !tbaa !5
  br label %873

873:                                              ; preds = %901, %870
  %874 = load ptr, ptr %92, align 8, !tbaa !5
  %875 = load i8, ptr %91, align 1, !tbaa !9, !range !11, !noundef !12
  %876 = trunc i8 %875 to i1
  br i1 %876, label %878, label %877

877:                                              ; preds = %873
  store i32 115, ptr %6, align 4
  br label %902

878:                                              ; preds = %873
  %879 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %94, i32 0, i32 0
  %880 = load ptr, ptr %92, align 8, !tbaa !5
  %881 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %880, i32 0, i32 0
  call void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %879, ptr noundef nonnull align 8 dereferenceable(88) %881)
  %882 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %94, i32 0, i32 1
  %883 = load ptr, ptr %92, align 8, !tbaa !5
  %884 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %883, i32 0, i32 1
  invoke void @_ZNK3HIR25TypeData_NamedFunction_Ty5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8 %882, ptr noundef nonnull align 8 dereferenceable(24) %884)
          to label %885 unwind label %888

885:                                              ; preds = %878
  invoke void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %93, ptr noundef %94)
          to label %886 unwind label %892

886:                                              ; preds = %885
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %93)
          to label %887 unwind label %896

887:                                              ; preds = %886
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %93) #10
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %94) #10
  store i32 1, ptr %6, align 4
  br label %902

888:                                              ; preds = %878
  %889 = landingpad { ptr, i32 }
          cleanup
  %890 = extractvalue { ptr, i32 } %889, 0
  store ptr %890, ptr %12, align 8
  %891 = extractvalue { ptr, i32 } %889, 1
  store i32 %891, ptr %13, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %879) #10
  br label %904

892:                                              ; preds = %885
  %893 = landingpad { ptr, i32 }
          cleanup
  %894 = extractvalue { ptr, i32 } %893, 0
  store ptr %894, ptr %12, align 8
  %895 = extractvalue { ptr, i32 } %893, 1
  store i32 %895, ptr %13, align 4
  br label %900

896:                                              ; preds = %886
  %897 = landingpad { ptr, i32 }
          cleanup
  %898 = extractvalue { ptr, i32 } %897, 0
  store ptr %898, ptr %12, align 8
  %899 = extractvalue { ptr, i32 } %897, 1
  store i32 %899, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %93) #10
  br label %900

900:                                              ; preds = %896, %892
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %94) #10
  br label %904

901:                                              ; No predecessors!
  store i8 0, ptr %91, align 1, !tbaa !9
  br label %873, !llvm.loop !78

902:                                              ; preds = %887, %877
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #10
  %903 = load i32, ptr %6, align 4
  switch i32 %903, label %907 [
    i32 115, label %905
  ]

904:                                              ; preds = %900, %888
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #10
  br label %1082

905:                                              ; preds = %902
  br label %906

906:                                              ; preds = %905
  store i8 0, ptr %91, align 1, !tbaa !9
  br label %866, !llvm.loop !79

907:                                              ; preds = %902, %869
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #10
  %908 = load i32, ptr %6, align 4
  switch i32 %908, label %1080 [
    i32 112, label %909
  ]

909:                                              ; preds = %907
  br label %1078

910:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %95) #10
  store i8 1, ptr %95, align 1, !tbaa !9
  br label %911

911:                                              ; preds = %1008, %910
  %912 = load i8, ptr %95, align 1, !tbaa !9, !range !11, !noundef !12
  %913 = trunc i8 %912 to i1
  br i1 %913, label %915, label %914

914:                                              ; preds = %911
  store i32 118, ptr %6, align 4
  br label %1009

915:                                              ; preds = %911
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #10
  %916 = load ptr, ptr %7, align 8, !tbaa !5
  %917 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %916)
  store ptr %917, ptr %96, align 8, !tbaa !5
  br label %918

918:                                              ; preds = %1004, %915
  %919 = load ptr, ptr %96, align 8, !tbaa !5
  %920 = load i8, ptr %95, align 1, !tbaa !9, !range !11, !noundef !12
  %921 = trunc i8 %920 to i1
  br i1 %921, label %923, label %922

922:                                              ; preds = %918
  store i32 121, ptr %6, align 4
  br label %1005

923:                                              ; preds = %918
  call void @llvm.lifetime.start.p0(i64 144, ptr %97) #10
  %924 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %97, i32 0, i32 0
  %925 = load ptr, ptr %96, align 8, !tbaa !5
  %926 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %925, i32 0, i32 0
  call void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8 %924, ptr noundef nonnull align 8 dereferenceable(96) %926)
  %927 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %97, i32 0, i32 1
  %928 = load ptr, ptr %96, align 8, !tbaa !5
  %929 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %928, i32 0, i32 1
  %930 = load i8, ptr %929, align 8, !tbaa !80, !range !11, !noundef !12
  %931 = trunc i8 %930 to i1
  %932 = zext i1 %931 to i8
  store i8 %932, ptr %927, align 8, !tbaa !80
  %933 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %97, i32 0, i32 2
  %934 = load ptr, ptr %96, align 8, !tbaa !5
  %935 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %934, i32 0, i32 2
  %936 = load i8, ptr %935, align 1, !tbaa !104, !range !11, !noundef !12
  %937 = trunc i8 %936 to i1
  %938 = zext i1 %937 to i8
  store i8 %938, ptr %933, align 1, !tbaa !104
  %939 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %97, i32 0, i32 3
  %940 = load ptr, ptr %96, align 8, !tbaa !5
  %941 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %940, i32 0, i32 3
  invoke void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %939, ptr noundef nonnull align 8 dereferenceable(8) %941)
          to label %942 unwind label %959

942:                                              ; preds = %923
  %943 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %97, i32 0, i32 4
  %944 = load ptr, ptr %96, align 8, !tbaa !5
  %945 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %944, i32 0, i32 4
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %943, ptr noundef nonnull align 8 dereferenceable(8) %945)
          to label %946 unwind label %963

946:                                              ; preds = %942
  %947 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %97, i32 0, i32 5
  call void @llvm.memset.p0.i64(ptr align 8 %947, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %947) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #10
  %948 = load ptr, ptr %96, align 8, !tbaa !5
  %949 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %948, i32 0, i32 5
  store ptr %949, ptr %98, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #10
  %950 = load ptr, ptr %98, align 8, !tbaa !5
  %951 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %950) #10
  %952 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.149", ptr %99, i32 0, i32 0
  store ptr %951, ptr %952, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #10
  %953 = load ptr, ptr %98, align 8, !tbaa !5
  %954 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %953) #10
  %955 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.149", ptr %100, i32 0, i32 0
  store ptr %954, ptr %955, align 8
  br label %956

956:                                              ; preds = %974, %946
  %957 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %99, ptr noundef nonnull align 8 dereferenceable(8) %100) #10
  br i1 %957, label %968, label %958

958:                                              ; preds = %956
  store i32 124, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #10
  br label %985

959:                                              ; preds = %923
  %960 = landingpad { ptr, i32 }
          cleanup
  %961 = extractvalue { ptr, i32 } %960, 0
  store ptr %961, ptr %12, align 8
  %962 = extractvalue { ptr, i32 } %960, 1
  store i32 %962, ptr %13, align 4
  br label %967

963:                                              ; preds = %942
  %964 = landingpad { ptr, i32 }
          cleanup
  %965 = extractvalue { ptr, i32 } %964, 0
  store ptr %965, ptr %12, align 8
  %966 = extractvalue { ptr, i32 } %964, 1
  store i32 %966, ptr %13, align 4
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %939) #10
  br label %967

967:                                              ; preds = %963, %959
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %924) #10
  br label %1003

968:                                              ; preds = %956
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #10
  %969 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %99) #10
  store ptr %969, ptr %101, align 8, !tbaa !5
  %970 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %97, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #10
  %971 = load ptr, ptr %101, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %102, ptr noundef nonnull align 8 dereferenceable(8) %971)
          to label %972 unwind label %976

972:                                              ; preds = %968
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %970, ptr noundef nonnull align 8 dereferenceable(8) %102)
          to label %973 unwind label %980

973:                                              ; preds = %972
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %102) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #10
  br label %974

974:                                              ; preds = %973
  %975 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %99) #10
  br label %956

976:                                              ; preds = %968
  %977 = landingpad { ptr, i32 }
          cleanup
  %978 = extractvalue { ptr, i32 } %977, 0
  store ptr %978, ptr %12, align 8
  %979 = extractvalue { ptr, i32 } %977, 1
  store i32 %979, ptr %13, align 4
  br label %984

980:                                              ; preds = %972
  %981 = landingpad { ptr, i32 }
          cleanup
  %982 = extractvalue { ptr, i32 } %981, 0
  store ptr %982, ptr %12, align 8
  %983 = extractvalue { ptr, i32 } %981, 1
  store i32 %983, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %102) #10
  br label %984

984:                                              ; preds = %980, %976
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #10
  br label %1002

985:                                              ; preds = %958
  invoke void @_ZN3HIR24TypeData_FunctionPointerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(144) %104, ptr noundef nonnull align 8 dereferenceable(144) %97)
          to label %986 unwind label %989

986:                                              ; preds = %985
  invoke void @_ZN3HIR8TypeData13make_FunctionENS_24TypeData_FunctionPointerE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %103, ptr noundef %104)
          to label %987 unwind label %993

987:                                              ; preds = %986
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %103)
          to label %988 unwind label %997

988:                                              ; preds = %987
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %103) #10
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %104) #10
  store i32 1, ptr %6, align 4
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %97) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr %97) #10
  br label %1005

989:                                              ; preds = %985
  %990 = landingpad { ptr, i32 }
          cleanup
  %991 = extractvalue { ptr, i32 } %990, 0
  store ptr %991, ptr %12, align 8
  %992 = extractvalue { ptr, i32 } %990, 1
  store i32 %992, ptr %13, align 4
  br label %1002

993:                                              ; preds = %986
  %994 = landingpad { ptr, i32 }
          cleanup
  %995 = extractvalue { ptr, i32 } %994, 0
  store ptr %995, ptr %12, align 8
  %996 = extractvalue { ptr, i32 } %994, 1
  store i32 %996, ptr %13, align 4
  br label %1001

997:                                              ; preds = %987
  %998 = landingpad { ptr, i32 }
          cleanup
  %999 = extractvalue { ptr, i32 } %998, 0
  store ptr %999, ptr %12, align 8
  %1000 = extractvalue { ptr, i32 } %998, 1
  store i32 %1000, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %103) #10
  br label %1001

1001:                                             ; preds = %997, %993
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %104) #10
  br label %1002

1002:                                             ; preds = %1001, %989, %984
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %97) #10
  br label %1003

1003:                                             ; preds = %1002, %967
  call void @llvm.lifetime.end.p0(i64 144, ptr %97) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %95) #10
  br label %1082

1004:                                             ; No predecessors!
  store i8 0, ptr %95, align 1, !tbaa !9
  br label %918, !llvm.loop !105

1005:                                             ; preds = %988, %922
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #10
  %1006 = load i32, ptr %6, align 4
  switch i32 %1006, label %1009 [
    i32 121, label %1007
  ]

1007:                                             ; preds = %1005
  br label %1008

1008:                                             ; preds = %1007
  store i8 0, ptr %95, align 1, !tbaa !9
  br label %911, !llvm.loop !106

1009:                                             ; preds = %1005, %914
  call void @llvm.lifetime.end.p0(i64 1, ptr %95) #10
  %1010 = load i32, ptr %6, align 4
  switch i32 %1010, label %1080 [
    i32 118, label %1011
  ]

1011:                                             ; preds = %1009
  br label %1078

1012:                                             ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %105) #10
  store i8 1, ptr %105, align 1, !tbaa !9
  br label %1013

1013:                                             ; preds = %1041, %1012
  %1014 = load i8, ptr %105, align 1, !tbaa !9, !range !11, !noundef !12
  %1015 = trunc i8 %1014 to i1
  br i1 %1015, label %1017, label %1016

1016:                                             ; preds = %1013
  store i32 126, ptr %6, align 4
  br label %1042

1017:                                             ; preds = %1013
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #10
  %1018 = load ptr, ptr %7, align 8, !tbaa !5
  %1019 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %1018)
  store ptr %1019, ptr %106, align 8, !tbaa !5
  br label %1020

1020:                                             ; preds = %1037, %1017
  %1021 = load ptr, ptr %106, align 8, !tbaa !5
  %1022 = load i8, ptr %105, align 1, !tbaa !9, !range !11, !noundef !12
  %1023 = trunc i8 %1022 to i1
  br i1 %1023, label %1025, label %1024

1024:                                             ; preds = %1020
  store i32 129, ptr %6, align 4
  br label %1038

1025:                                             ; preds = %1020
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #10
  %1026 = load ptr, ptr %106, align 8, !tbaa !5
  %1027 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %1026, i32 0, i32 0
  %1028 = load ptr, ptr %1027, align 8, !tbaa !107
  %1029 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %107, i32 0, i32 0
  store ptr %1028, ptr %1029, align 8, !tbaa !107
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %109, ptr align 8 %107, i64 8, i1 false), !tbaa.struct !109
  %1030 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %109, i32 0, i32 0
  %1031 = load ptr, ptr %1030, align 8
  call void @_ZN3HIR8TypeData12make_ClosureENS0_12Data_ClosureE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %108, ptr %1031)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %108)
          to label %1032 unwind label %1033

1032:                                             ; preds = %1025
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %108) #10
  store i32 1, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #10
  br label %1038

1033:                                             ; preds = %1025
  %1034 = landingpad { ptr, i32 }
          cleanup
  %1035 = extractvalue { ptr, i32 } %1034, 0
  store ptr %1035, ptr %12, align 8
  %1036 = extractvalue { ptr, i32 } %1034, 1
  store i32 %1036, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %108) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #10
  br label %1082

1037:                                             ; No predecessors!
  store i8 0, ptr %105, align 1, !tbaa !9
  br label %1020, !llvm.loop !110

1038:                                             ; preds = %1032, %1024
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #10
  %1039 = load i32, ptr %6, align 4
  switch i32 %1039, label %1042 [
    i32 129, label %1040
  ]

1040:                                             ; preds = %1038
  br label %1041

1041:                                             ; preds = %1040
  store i8 0, ptr %105, align 1, !tbaa !9
  br label %1013, !llvm.loop !111

1042:                                             ; preds = %1038, %1016
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #10
  %1043 = load i32, ptr %6, align 4
  switch i32 %1043, label %1080 [
    i32 126, label %1044
  ]

1044:                                             ; preds = %1042
  br label %1078

1045:                                             ; preds = %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %110) #10
  store i8 1, ptr %110, align 1, !tbaa !9
  br label %1046

1046:                                             ; preds = %1074, %1045
  %1047 = load i8, ptr %110, align 1, !tbaa !9, !range !11, !noundef !12
  %1048 = trunc i8 %1047 to i1
  br i1 %1048, label %1050, label %1049

1049:                                             ; preds = %1046
  store i32 132, ptr %6, align 4
  br label %1075

1050:                                             ; preds = %1046
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #10
  %1051 = load ptr, ptr %7, align 8, !tbaa !5
  %1052 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %1051)
  store ptr %1052, ptr %111, align 8, !tbaa !5
  br label %1053

1053:                                             ; preds = %1070, %1050
  %1054 = load ptr, ptr %111, align 8, !tbaa !5
  %1055 = load i8, ptr %110, align 1, !tbaa !9, !range !11, !noundef !12
  %1056 = trunc i8 %1055 to i1
  br i1 %1056, label %1058, label %1057

1057:                                             ; preds = %1053
  store i32 135, ptr %6, align 4
  br label %1071

1058:                                             ; preds = %1053
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #10
  %1059 = load ptr, ptr %111, align 8, !tbaa !5
  %1060 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %1059, i32 0, i32 0
  %1061 = load ptr, ptr %1060, align 8, !tbaa !112
  %1062 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %112, i32 0, i32 0
  store ptr %1061, ptr %1062, align 8, !tbaa !112
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %114, ptr align 8 %112, i64 8, i1 false), !tbaa.struct !109
  %1063 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %114, i32 0, i32 0
  %1064 = load ptr, ptr %1063, align 8
  call void @_ZN3HIR8TypeData14make_GeneratorENS0_14Data_GeneratorE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %113, ptr %1064)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %113)
          to label %1065 unwind label %1066

1065:                                             ; preds = %1058
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %113) #10
  store i32 1, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #10
  br label %1071

1066:                                             ; preds = %1058
  %1067 = landingpad { ptr, i32 }
          cleanup
  %1068 = extractvalue { ptr, i32 } %1067, 0
  store ptr %1068, ptr %12, align 8
  %1069 = extractvalue { ptr, i32 } %1067, 1
  store i32 %1069, ptr %13, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %113) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %110) #10
  br label %1082

1070:                                             ; No predecessors!
  store i8 0, ptr %110, align 1, !tbaa !9
  br label %1053, !llvm.loop !114

1071:                                             ; preds = %1065, %1057
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #10
  %1072 = load i32, ptr %6, align 4
  switch i32 %1072, label %1075 [
    i32 135, label %1073
  ]

1073:                                             ; preds = %1071
  br label %1074

1074:                                             ; preds = %1073
  store i8 0, ptr %110, align 1, !tbaa !9
  br label %1046, !llvm.loop !115

1075:                                             ; preds = %1071, %1049
  call void @llvm.lifetime.end.p0(i64 1, ptr %110) #10
  %1076 = load i32, ptr %6, align 4
  switch i32 %1076, label %1080 [
    i32 132, label %1077
  ]

1077:                                             ; preds = %1075
  br label %1078

1078:                                             ; preds = %1077, %1044, %1011, %909, %864, %824, %781, %720, %684, %639, %380, %294, %260, %214, %185, %158, %126
  br label %1079

1079:                                             ; preds = %1078
  store i8 0, ptr %5, align 1, !tbaa !9
  br label %122, !llvm.loop !116

1080:                                             ; preds = %1075, %1042, %1009, %907, %862, %822, %779, %718, %682, %637, %378, %292, %258, %212, %183, %156, %125
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #10
  %1081 = load i32, ptr %6, align 4
  switch i32 %1081, label %1085 [
    i32 5, label %1083
  ]

1082:                                             ; preds = %1066, %1033, %1003, %904, %856, %816, %773, %712, %679, %631, %372, %286, %255, %203, %174, %147
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #10
  br label %1090

1083:                                             ; preds = %1080
  br label %1084

1084:                                             ; preds = %1083
  store i8 0, ptr %5, align 1, !tbaa !9
  br label %116, !llvm.loop !117

1085:                                             ; preds = %1080, %119
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #10
  %1086 = load i32, ptr %6, align 4
  switch i32 %1086, label %1095 [
    i32 2, label %1087
    i32 1, label %1089
  ]

1087:                                             ; preds = %1085
  %1088 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.24, ptr %1088, align 16, !tbaa !5
  call void @__cxa_throw(ptr %1088, ptr @_ZTIPKc, ptr null) #12
  unreachable

1089:                                             ; preds = %1085
  ret void

1090:                                             ; preds = %1082
  %1091 = load ptr, ptr %12, align 8
  %1092 = load i32, ptr %13, align 4
  %1093 = insertvalue { ptr, i32 } poison, ptr %1091, 0
  %1094 = insertvalue { ptr, i32 } %1093, i32 %1092, 1
  resume { ptr, i32 } %1094

1095:                                             ; preds = %1085
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData10make_InferENS0_10Data_InferE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, i64) #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData12make_DivergeENS0_12Data_DivergeE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData14make_PrimitiveENS_8CoreTypeE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData9make_PathENS_13TypeData_PathE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData12make_GenericENS_10GenericRefE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR10GenericRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR20TypeData_TraitObjectC2Ev(ptr noundef nonnull align 8 dereferenceable(172)) unnamed_addr #9 align 2

declare void @_ZNK3HIR9TraitPath5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TraitPath") align 8, ptr noundef nonnull align 8 dereferenceable(144)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR9TraitPathaSEOS0_(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(144)) #9 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #4 align 2

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

declare void @_ZNK3HIR11GenericPath5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericPath") align 8, ptr noundef nonnull align 8 dereferenceable(32)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData16make_TraitObjectENS_20TypeData_TraitObjectE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR20TypeData_TraitObjectC2EOS0_(ptr noundef nonnull align 8 dereferenceable(172), ptr noundef nonnull align 8 dereferenceable(172)) unnamed_addr #9 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172)) unnamed_addr #4 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(144)) #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(104)) #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92)) unnamed_addr #4 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData15make_ErasedTypeENS_19TypeData_ErasedTypeE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData10make_ArrayENS0_10Data_ArrayE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData10make_SliceENS0_10Data_SliceE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData10make_TupleESt6vectorINS_7TypeRefESaIS2_EE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData11make_BorrowENS0_11Data_BorrowE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData12make_PointerENS0_12Data_PointerE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData13make_FunctionENS_24TypeData_FunctionPointerE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR24TypeData_FunctionPointerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #9 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData12make_ClosureENS0_12Data_ClosureE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData14make_GeneratorENS0_14Data_GeneratorE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr) #2 align 2

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

!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 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{i64 0, i64 4, !14, i64 4, i64 4, !16}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"_ZTSN3HIR10InferClassE", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = !{!24, !24, i64 0}
!24 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}
!30 = distinct !{!30, !19}
!31 = !{i64 0, i64 4, !14}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = !{!35, !15, i64 88}
!35 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner8Data_FcnE", !36, i64 0, !15, i64 88}
!36 = !{!"_ZTSN3HIR4PathE", !37, i64 0}
!37 = !{!"_ZTSN3HIR4Path4DataE", !38, i64 0, !7, i64 8}
!38 = !{!"_ZTSN3HIR4Path4Data3TagE", !7, i64 0}
!39 = distinct !{!39, !19}
!40 = distinct !{!40, !19}
!41 = distinct !{!41, !19}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}
!45 = distinct !{!45, !19}
!46 = distinct !{!46, !19}
!47 = !{!48, !10, i64 0}
!48 = !{!"_ZTSN3HIR19TypeData_ErasedTypeE", !10, i64 0, !49, i64 8, !53, i64 32, !57, i64 56}
!49 = !{!"_ZTSSt6vectorIN3HIR9TraitPathESaIS1_EE", !50, i64 0}
!50 = !{!"_ZTSSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE12_Vector_implE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!53 = !{!"_ZTSSt6vectorIN3HIR11LifetimeRefESaIS1_EE", !54, i64 0}
!54 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE", !55, i64 0}
!55 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE12_Vector_implE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!57 = !{!"_ZTSN3HIR25TypeData_ErasedType_InnerE", !58, i64 0, !7, i64 8}
!58 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner3TagE", !7, i64 0}
!59 = distinct !{!59, !19}
!60 = distinct !{!60, !19}
!61 = distinct !{!61, !19}
!62 = distinct !{!62, !19}
!63 = distinct !{!63, !19}
!64 = distinct !{!64, !19}
!65 = distinct !{!65, !19}
!66 = distinct !{!66, !19}
!67 = !{!68, !70, i64 4}
!68 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !69, i64 0, !70, i64 4, !71, i64 8}
!69 = !{!"_ZTSN3HIR11LifetimeRefE", !15, i64 0}
!70 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!71 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!72 = distinct !{!72, !19}
!73 = distinct !{!73, !19}
!74 = !{!75, !70, i64 0}
!75 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !70, i64 0, !71, i64 8}
!76 = distinct !{!76, !19}
!77 = distinct !{!77, !19}
!78 = distinct !{!78, !19}
!79 = distinct !{!79, !19}
!80 = !{!81, !10, i64 96}
!81 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !82, i64 0, !10, i64 96, !10, i64 97, !99, i64 104, !71, i64 112, !100, i64 120}
!82 = !{!"_ZTSN3HIR13GenericParamsE", !83, i64 0, !87, i64 24, !91, i64 48, !95, i64 72}
!83 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !84, i64 0}
!84 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !85, i64 0}
!85 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !86, i64 0}
!86 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!87 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !88, i64 0}
!88 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !89, i64 0}
!89 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !90, i64 0}
!90 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!91 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !92, i64 0}
!92 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !93, i64 0}
!93 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !94, i64 0}
!94 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!95 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !96, i64 0}
!96 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !97, i64 0}
!97 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !98, i64 0}
!98 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!99 = !{!"_ZTS8RcString", !6, i64 0}
!100 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !101, i64 0}
!101 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !102, i64 0}
!102 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !103, i64 0}
!103 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!104 = !{!81, !10, i64 97}
!105 = distinct !{!105, !19}
!106 = distinct !{!106, !19}
!107 = !{!108, !6, i64 0}
!108 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !6, i64 0}
!109 = !{i64 0, i64 8, !5}
!110 = distinct !{!110, !19}
!111 = distinct !{!111, !19}
!112 = !{!113, !6, i64 0}
!113 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !6, i64 0}
!114 = distinct !{!114, !19}
!115 = distinct !{!115, !19}
!116 = distinct !{!116, !19}
!117 = distinct !{!117, !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.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr", [8 x i8] }
%"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.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.HIR::GenericParams" = type { %"class.std::vector", %"class.std::vector.2", %"class.std::vector.7", %"class.std::vector.12" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.2" = type { %"struct.std::_Vector_base.3" }
%"struct.std::_Vector_base.3" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.7" = type { %"struct.std::_Vector_base.8" }
%"struct.std::_Vector_base.8" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.12" = type { %"struct.std::_Vector_base.13" }
%"struct.std::_Vector_base.13" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.22, %class.ThinVector.23, %class.ThinVector.24 }
%class.ThinVector.22 = type { ptr }
%class.ThinVector.23 = type { ptr }
%class.ThinVector.24 = type { ptr }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.25" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"class.std::unique_ptr.25" = type { %"struct.std::__uniq_ptr_data.26" }
%"struct.std::__uniq_ptr_data.26" = type { %"class.std::__uniq_ptr_impl.27" }
%"class.std::__uniq_ptr_impl.27" = type { %"class.std::tuple.28" }
%"class.std::tuple.28" = type { %"struct.std::_Tuple_impl.29" }
%"struct.std::_Tuple_impl.29" = type { %"struct.std::_Head_base.32" }
%"struct.std::_Head_base.32" = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.HIR::TypeData_NamedFunction_Ty" = type { i32, %"union.HIR::TypeData_NamedFunction_Ty::DataUnion" }
%"union.HIR::TypeData_NamedFunction_Ty::DataUnion" = type { %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" }
%"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" = type { ptr, i64 }
%"class.HIR::TypeData" = type { i32, %"union.HIR::TypeData::DataUnion" }
%"union.HIR::TypeData::DataUnion" = type { %"struct.HIR::TypeData_ErasedType", [16 x i8] }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.114", %"class.std::vector.119", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.114" = type { %"struct.std::_Vector_base.115" }
%"struct.std::_Vector_base.115" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.119" = type { %"struct.std::_Vector_base.120" }
%"struct.std::_Vector_base.120" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.25" }
%"struct.HIR::GenericRef" = type <{ %class.RcString, i32, [4 x i8] }>
%"struct.HIR::TypeData_TraitObject" = type <{ %"class.HIR::TraitPath", %"class.std::vector.109", %"struct.HIR::LifetimeRef", [4 x i8] }>
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr.25", %"class.HIR::GenericPath", %"class.std::map.98", %"class.std::map.104", ptr }
%"class.std::map.98" = type { %"class.std::_Rb_tree.99" }
%"class.std::_Rb_tree.99" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.104" = type { %"class.std::_Rb_tree.105" }
%"class.std::_Rb_tree.105" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector.109" = type { %"struct.std::_Vector_base.110" }
%"struct.std::_Vector_base.110" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.__gnu_cxx::__normal_iterator.146" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.147" = type { ptr }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn" = type <{ %"class.HIR::Path", i32, [4 x i8] }>
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"class.std::vector.17" = type { %"struct.std::_Vector_base.18" }
%"struct.std::_Vector_base.18" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.149" = type { ptr }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"struct.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.17" }

@.str.18 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK3HIR7TypeRef13clone_shallowEv = external hidden unnamed_addr constant [51 x i8], align 1

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR9ArraySize5cloneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::ArraySize") align 8, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

declare void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8, ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #4 align 2

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

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

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

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

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

declare void @_ZNK3HIR10PathParams5cloneEv(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

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

declare void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8, ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR10GenericRefD2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR15TypePathBinding5cloneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypePathBinding") align 8, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR25TypeData_NamedFunction_Ty5cloneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3HIR7TypeRef13clone_shallowEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
.split577:
  %2 = alloca %"class.HIR::TypeData", align 8
  %3 = alloca %"class.HIR::TypeData", align 8
  %4 = alloca %"class.HIR::TypeData", align 8
  %5 = alloca %"class.HIR::TypeData", align 8
  %6 = alloca %"struct.HIR::TypeData_Path", align 8
  %7 = alloca %"class.HIR::TypeData", align 8
  %8 = alloca %"struct.HIR::GenericRef", align 8
  %9 = alloca %"struct.HIR::TypeData_TraitObject", align 8
  %10 = alloca %"class.HIR::TraitPath", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator.146", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator.146", align 8
  %13 = alloca %"class.HIR::GenericPath", align 8
  %14 = alloca %"class.HIR::TypeData", align 8
  %15 = alloca %"struct.HIR::TypeData_TraitObject", align 8
  %16 = alloca %"class.std::vector.114", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.147", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.147", align 8
  %19 = alloca %"class.HIR::TraitPath", align 8
  %20 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %21 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %22 = alloca %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", align 8
  %23 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %24 = alloca %"class.HIR::TypeRef", align 8
  %25 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %26 = alloca %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", align 8
  %27 = alloca %"class.HIR::TypeData", align 8
  %28 = alloca %"struct.HIR::TypeData_ErasedType", align 8
  %29 = alloca %"class.HIR::TypeData", align 8
  %30 = alloca %"struct.HIR::TypeData::Data_Array", align 8
  %31 = alloca %"class.HIR::TypeData", align 8
  %32 = alloca %"struct.HIR::TypeData::Data_Slice", align 8
  %33 = alloca %"class.std::vector.17", align 8
  %34 = alloca %"class.__gnu_cxx::__normal_iterator.149", align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.149", align 8
  %36 = alloca %"class.HIR::TypeRef", align 8
  %37 = alloca %"class.HIR::TypeData", align 8
  %38 = alloca %"class.std::vector.17", align 8
  %39 = alloca %"class.HIR::TypeData", align 8
  %40 = alloca %"struct.HIR::TypeData::Data_Borrow", align 8
  %41 = alloca %"class.HIR::TypeData", align 8
  %42 = alloca %"struct.HIR::TypeData::Data_Pointer", align 8
  %43 = alloca %"class.HIR::TypeData", align 8
  %44 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %45 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %46 = alloca %"class.__gnu_cxx::__normal_iterator.149", align 8
  %47 = alloca %"class.__gnu_cxx::__normal_iterator.149", align 8
  %48 = alloca %"class.HIR::TypeRef", align 8
  %49 = alloca %"class.HIR::TypeData", align 8
  %50 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %51 = alloca %"class.HIR::TypeData", align 8
  %52 = alloca %"class.HIR::TypeData", align 8
  %53 = getelementptr inbounds i8, ptr %45, i64 104
  %54 = getelementptr inbounds i8, ptr %45, i64 120
  %55 = getelementptr inbounds i8, ptr %26, i64 24
  %56 = getelementptr inbounds i8, ptr %22, i64 88
  %57 = getelementptr inbounds i8, ptr %28, i64 8
  %58 = getelementptr inbounds i8, ptr %28, i64 32
  %59 = getelementptr inbounds i8, ptr %28, i64 56
  %60 = getelementptr inbounds i8, ptr %9, i64 144
  %61 = getelementptr inbounds i8, ptr %9, i64 168
  %62 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1)
  %63 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  switch i32 %63, label %.critedge.backedge [
    i32 0, label %64
    i32 1, label %65
    i32 2, label %70
    i32 3, label %75
    i32 4, label %81
    i32 5, label %96
    i32 6, label %105
    i32 7, label %142
    i32 8, label %212
    i32 9, label %226
    i32 10, label %235
    i32 11, label %258
    i32 12, label %270
    i32 13, label %282
    i32 14, label %296
    i32 15, label %336
    i32 16, label %342
  ], !llvm.loop !5

64:                                               ; preds = %.split577
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 1172, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef13clone_shallowEv) #9
  unreachable

65:                                               ; preds = %.split577
  %66 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %.sroa.0144.0.copyload = load i64, ptr %66, align 4
  call void @_ZN3HIR8TypeData10make_InferENS0_10Data_InferE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %2, i64 %.sroa.0144.0.copyload)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %2)
          to label %67 unwind label %68

67:                                               ; preds = %65
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %2) #10
  br label %.thread355

68:                                               ; preds = %65
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %2) #10
  br label %349

70:                                               ; preds = %.split577
  %71 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @_ZN3HIR8TypeData12make_DivergeENS0_12Data_DivergeE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %3)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %3)
          to label %72 unwind label %73

72:                                               ; preds = %70
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %3) #10
  br label %.thread355

73:                                               ; preds = %70
  %74 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %3) #10
  br label %349

75:                                               ; preds = %.split577
  %76 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %77 = load i32, ptr %76, align 4, !tbaa !7
  call void @_ZN3HIR8TypeData14make_PrimitiveENS_8CoreTypeE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %4, i32 noundef %77)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %4)
          to label %78 unwind label %79

78:                                               ; preds = %75
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %4) #10
  br label %.thread355

79:                                               ; preds = %75
  %80 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %4) #10
  br label %349

81:                                               ; preds = %.split577
  %82 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %6, ptr noundef nonnull align 8 dereferenceable(88) %82)
  %83 = getelementptr inbounds i8, ptr %6, i64 88
  %84 = getelementptr inbounds i8, ptr %82, i64 88
  invoke void @_ZNK3HIR15TypePathBinding5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypePathBinding") align 8 %83, ptr noundef nonnull align 8 dereferenceable(16) %84)
          to label %85 unwind label %89

85:                                               ; preds = %81
  %86 = getelementptr inbounds i8, ptr %6, i64 104
  call void @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEC2IS3_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %86) #10
  invoke void @_ZN3HIR8TypeData9make_PathENS_13TypeData_PathE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %5, ptr noundef nonnull %6)
          to label %87 unwind label %91

87:                                               ; preds = %85
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %5)
          to label %88 unwind label %93

88:                                               ; preds = %87
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %5) #10
  call void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %6) #10
  br label %.thread355

89:                                               ; preds = %81
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #10
  br label %349

91:                                               ; preds = %85
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %95

93:                                               ; preds = %87
  %94 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %5) #10
  br label %95

95:                                               ; preds = %93, %91
  %.pn345 = phi { ptr, i32 } [ %94, %93 ], [ %92, %91 ]
  call void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %6) #10
  br label %349

96:                                               ; preds = %.split577
  %97 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @_ZN3HIR10GenericRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(12) %8, ptr noundef nonnull align 8 dereferenceable(12) %97)
  invoke void @_ZN3HIR8TypeData12make_GenericENS_10GenericRefE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %7, ptr noundef nonnull %8)
          to label %98 unwind label %100

98:                                               ; preds = %96
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %7)
          to label %99 unwind label %102

99:                                               ; preds = %98
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %7) #10
  call void @_ZN3HIR10GenericRefD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %8) #10
  br label %.thread355

100:                                              ; preds = %96
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %104

102:                                              ; preds = %98
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %7) #10
  br label %104

104:                                              ; preds = %102, %100
  %.pn343 = phi { ptr, i32 } [ %103, %102 ], [ %101, %100 ]
  call void @_ZN3HIR10GenericRefD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %8) #10
  br label %349

105:                                              ; preds = %.split577
  %106 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %9) #10
  call void @_ZN3HIR20TypeData_TraitObjectC2Ev(ptr noundef nonnull align 8 dereferenceable(172) %9)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %10) #10
  invoke void @_ZNK3HIR9TraitPath5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TraitPath") align 8 %10, ptr noundef nonnull align 8 dereferenceable(144) %106)
          to label %107 unwind label %116

107:                                              ; preds = %105
  %108 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR9TraitPathaSEOS0_(ptr noundef nonnull align 8 dereferenceable(144) %9, ptr noundef nonnull align 8 dereferenceable(144) %10)
          to label %109 unwind label %118

109:                                              ; preds = %107
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %10) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %10) #10
  %110 = getelementptr inbounds i8, ptr %106, i64 144
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #10
  %111 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %110) #10
  store ptr %111, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  %112 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %110) #10
  store ptr %112, ptr %12, align 8
  %113 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  br i1 %113, label %.lr.ph575, label %._crit_edge576

._crit_edge576:                                   ; preds = %123, %109
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  %114 = getelementptr inbounds i8, ptr %106, i64 168
  %115 = load i32, ptr %114, align 8, !tbaa !11
  store i32 %115, ptr %61, align 8, !tbaa !11
  invoke void @_ZN3HIR20TypeData_TraitObjectC2EOS0_(ptr noundef nonnull align 8 dereferenceable(172) %15, ptr noundef nonnull align 8 dereferenceable(172) %9)
          to label %131 unwind label %134

116:                                              ; preds = %105
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %120

118:                                              ; preds = %107
  %119 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %10) #10
  br label %120

120:                                              ; preds = %118, %116
  %.pn336 = phi { ptr, i32 } [ %119, %118 ], [ %117, %116 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %10) #10
  br label %141

.lr.ph575:                                        ; preds = %109, %123
  %121 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #10
  invoke void @_ZNK3HIR11GenericPath5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::GenericPath") align 8 %13, ptr noundef nonnull align 8 dereferenceable(32) %121)
          to label %122 unwind label %126

122:                                              ; preds = %.lr.ph575
  invoke void @_ZNSt6vectorIN3HIR11GenericPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %123 unwind label %128

123:                                              ; preds = %122
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #10
  %124 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #10
  %125 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  br i1 %125, label %.lr.ph575, label %._crit_edge576

126:                                              ; preds = %.lr.ph575
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %130

128:                                              ; preds = %122
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  br label %130

130:                                              ; preds = %128, %126
  %.pn340 = phi { ptr, i32 } [ %129, %128 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  br label %141

131:                                              ; preds = %._crit_edge576
  invoke void @_ZN3HIR8TypeData16make_TraitObjectENS_20TypeData_TraitObjectE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %14, ptr noundef nonnull %15)
          to label %132 unwind label %136

132:                                              ; preds = %131
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %14)
          to label %133 unwind label %138

133:                                              ; preds = %132
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %14) #10
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %15) #10
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %9) #10
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %9) #10
  br label %.thread355

134:                                              ; preds = %._crit_edge576
  %135 = landingpad { ptr, i32 }
          cleanup
  br label %141

136:                                              ; preds = %131
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %140

138:                                              ; preds = %132
  %139 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %14) #10
  br label %140

140:                                              ; preds = %138, %136
  %.pn338 = phi { ptr, i32 } [ %139, %138 ], [ %137, %136 ]
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %15) #10
  br label %141

141:                                              ; preds = %140, %134, %130, %120
  %.pn340.pn = phi { ptr, i32 } [ %.pn340, %130 ], [ %.pn338, %140 ], [ %135, %134 ], [ %.pn336, %120 ]
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %9) #10
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %9) #10
  br label %349

142:                                              ; preds = %.split577
  %143 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #10
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  %144 = getelementptr inbounds i8, ptr %143, i64 8
  %145 = call noundef i64 @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %144) #10
  invoke void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %145)
          to label %146 unwind label %150

146:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #10
  %147 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %144) #10
  store ptr %147, ptr %17, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #10
  %148 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %144) #10
  store ptr %148, ptr %18, align 8
  %149 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  br i1 %149, label %.lr.ph445, label %._crit_edge446

._crit_edge446:                                   ; preds = %154, %146
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %20) #10
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %20)
          to label %.lr.ph572 unwind label %164

150:                                              ; preds = %142
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %211

.lr.ph445:                                        ; preds = %146, %154
  %152 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %19) #10
  invoke void @_ZNK3HIR9TraitPath5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TraitPath") align 8 %19, ptr noundef nonnull align 8 dereferenceable(144) %152)
          to label %153 unwind label %157

153:                                              ; preds = %.lr.ph445
  invoke void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(144) %19)
          to label %154 unwind label %159

154:                                              ; preds = %153
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %19) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %19) #10
  %155 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  %156 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  br i1 %156, label %.lr.ph445, label %._crit_edge446

157:                                              ; preds = %.lr.ph445
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %161

159:                                              ; preds = %153
  %160 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %19) #10
  br label %161

161:                                              ; preds = %159, %157
  %.pn333 = phi { ptr, i32 } [ %160, %159 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  br label %211

.loopexit366:                                     ; preds = %.lr.ph572, %..loopexit_crit_edge, %..loopexit359_crit_edge, %..loopexit360_crit_edge
  %162 = load i8, ptr %143, align 8, !tbaa !13, !range !27, !noundef !28
  store i8 %162, ptr %28, align 8, !tbaa !13
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  %163 = getelementptr inbounds i8, ptr %143, i64 32
  invoke void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(24) %163)
          to label %199 unwind label %202

164:                                              ; preds = %._crit_edge446
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %210

.lr.ph572:                                        ; preds = %._crit_edge446
  %166 = getelementptr inbounds i8, ptr %143, i64 56
  %167 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %166)
  switch i32 %167, label %.loopexit366 [
    i32 0, label %171
    i32 1, label %.preheader
    i32 2, label %.preheader362
    i32 3, label %.preheader364
  ]

.preheader364:                                    ; preds = %.lr.ph572
  %168 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %166)
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %25) #10
  invoke void @_ZNK3HIR10PathParams5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::PathParams") align 8 %26, ptr noundef nonnull align 8 dereferenceable(24) %168)
          to label %190 unwind label %.split.split

.preheader362:                                    ; preds = %.lr.ph572
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %166)
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %23) #10
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %24, ptr noundef nonnull align 8 dereferenceable(8) %169)
          to label %182 unwind label %.split490.split

.preheader:                                       ; preds = %.lr.ph572
  %170 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %166)
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %21) #10
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %22, ptr noundef nonnull align 8 dereferenceable(88) %170)
          to label %172 unwind label %.split525.split

171:                                              ; preds = %.lr.ph572
  call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 1206, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef13clone_shallowEv) #9
  unreachable

172:                                              ; preds = %.preheader
  %173 = getelementptr inbounds i8, ptr %170, i64 88
  %174 = load i32, ptr %173, align 8, !tbaa !29
  store i32 %174, ptr %56, align 8, !tbaa !29
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS0_8Data_FcnE(ptr noundef nonnull align 8 dereferenceable(104) %21, ptr noundef nonnull %22)
          to label %175 unwind label %.split528.split

175:                                              ; preds = %172
  %176 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %20, ptr noundef nonnull align 8 dereferenceable(104) %21)
          to label %..loopexit_crit_edge unwind label %.split531.split

..loopexit_crit_edge:                             ; preds = %175
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %21) #10
  call void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92) %22) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %21) #10
  br label %.loopexit366

.split525.split:                                  ; preds = %.preheader
  %177 = landingpad { ptr, i32 }
          cleanup
  br label %181

.split528.split:                                  ; preds = %172
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %180

.split531.split:                                  ; preds = %175
  %179 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %21) #10
  br label %180

180:                                              ; preds = %.split531.split, %.split528.split
  %.pn327 = phi { ptr, i32 } [ %179, %.split531.split ], [ %178, %.split528.split ]
  call void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92) %22) #10
  br label %181

181:                                              ; preds = %180, %.split525.split
  %.pn327.pn = phi { ptr, i32 } [ %.pn327, %180 ], [ %177, %.split525.split ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %21) #10
  br label %209

182:                                              ; preds = %.preheader362
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(104) %23, ptr noundef nonnull %24)
          to label %183 unwind label %.split493.split

183:                                              ; preds = %182
  %184 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %20, ptr noundef nonnull align 8 dereferenceable(104) %23)
          to label %..loopexit359_crit_edge unwind label %.split496.split

..loopexit359_crit_edge:                          ; preds = %183
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %23) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %23) #10
  br label %.loopexit366

.split490.split:                                  ; preds = %.preheader362
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %189

.split493.split:                                  ; preds = %182
  %186 = landingpad { ptr, i32 }
          cleanup
  br label %188

.split496.split:                                  ; preds = %183
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %23) #10
  br label %188

188:                                              ; preds = %.split496.split, %.split493.split
  %.pn324 = phi { ptr, i32 } [ %187, %.split496.split ], [ %186, %.split493.split ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  br label %189

189:                                              ; preds = %188, %.split490.split
  %.pn324.pn = phi { ptr, i32 } [ %.pn324, %188 ], [ %185, %.split490.split ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %23) #10
  br label %209

190:                                              ; preds = %.preheader364
  %191 = getelementptr inbounds i8, ptr %168, i64 24
  call void @_ZNSt10shared_ptrIN3HIR30TypeData_ErasedType_AliasInnerEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %55, ptr noundef nonnull align 8 dereferenceable(16) %191) #10
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS0_10Data_AliasE(ptr noundef nonnull align 8 dereferenceable(104) %25, ptr noundef nonnull %26)
          to label %192 unwind label %.split450.split

192:                                              ; preds = %190
  %193 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %20, ptr noundef nonnull align 8 dereferenceable(104) %25)
          to label %..loopexit360_crit_edge unwind label %.split453.split

..loopexit360_crit_edge:                          ; preds = %192
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %25) #10
  call void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %26) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %25) #10
  br label %.loopexit366

.split.split:                                     ; preds = %.preheader364
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %198

.split450.split:                                  ; preds = %190
  %195 = landingpad { ptr, i32 }
          cleanup
  br label %197

.split453.split:                                  ; preds = %192
  %196 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %25) #10
  br label %197

197:                                              ; preds = %.split453.split, %.split450.split
  %.pn321 = phi { ptr, i32 } [ %196, %.split453.split ], [ %195, %.split450.split ]
  call void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %26) #10
  br label %198

198:                                              ; preds = %197, %.split.split
  %.pn321.pn = phi { ptr, i32 } [ %.pn321, %197 ], [ %194, %.split.split ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %25) #10
  br label %209

199:                                              ; preds = %.loopexit366
  call void @_ZN3HIR25TypeData_ErasedType_InnerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(104) %59, ptr noundef nonnull align 8 dereferenceable(104) %20) #10
  invoke void @_ZN3HIR8TypeData15make_ErasedTypeENS_19TypeData_ErasedTypeE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %27, ptr noundef nonnull %28)
          to label %200 unwind label %204

200:                                              ; preds = %199
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %27)
          to label %201 unwind label %206

201:                                              ; preds = %200
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %27) #10
  call void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160) %28) #10
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %20) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %20) #10
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  br label %.thread355

202:                                              ; preds = %.loopexit366
  %203 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %57) #10
  br label %209

204:                                              ; preds = %199
  %205 = landingpad { ptr, i32 }
          cleanup
  br label %208

206:                                              ; preds = %200
  %207 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %27) #10
  br label %208

208:                                              ; preds = %206, %204
  %.pn319 = phi { ptr, i32 } [ %207, %206 ], [ %205, %204 ]
  call void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160) %28) #10
  br label %209

209:                                              ; preds = %181, %189, %198, %208, %202
  %.pn321.pn.pn.pn = phi { ptr, i32 } [ %.pn319, %208 ], [ %203, %202 ], [ %.pn321.pn, %198 ], [ %.pn324.pn, %189 ], [ %.pn327.pn, %181 ]
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %20) #10
  br label %210

210:                                              ; preds = %209, %164
  %.pn321.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn321.pn.pn.pn, %209 ], [ %165, %164 ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %20) #10
  br label %211

211:                                              ; preds = %210, %161, %150
  %.pn333.pn = phi { ptr, i32 } [ %.pn333, %161 ], [ %.pn321.pn.pn.pn.pn, %210 ], [ %151, %150 ]
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  br label %349

212:                                              ; preds = %.split577
  %213 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %30, ptr noundef nonnull align 8 dereferenceable(8) %213)
  %214 = getelementptr inbounds i8, ptr %30, i64 8
  %215 = getelementptr inbounds i8, ptr %213, i64 8
  invoke void @_ZNK3HIR9ArraySize5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::ArraySize") align 8 %214, ptr noundef nonnull align 8 dereferenceable(32) %215)
          to label %216 unwind label %219

216:                                              ; preds = %212
  invoke void @_ZN3HIR8TypeData10make_ArrayENS0_10Data_ArrayE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %29, ptr noundef nonnull %30)
          to label %217 unwind label %221

217:                                              ; preds = %216
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %29)
          to label %218 unwind label %223

218:                                              ; preds = %217
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %29) #10
  call void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %30) #10
  br label %.thread355

219:                                              ; preds = %212
  %220 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #10
  br label %349

221:                                              ; preds = %216
  %222 = landingpad { ptr, i32 }
          cleanup
  br label %225

223:                                              ; preds = %217
  %224 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %29) #10
  br label %225

225:                                              ; preds = %223, %221
  %.pn316 = phi { ptr, i32 } [ %224, %223 ], [ %222, %221 ]
  call void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %30) #10
  br label %349

226:                                              ; preds = %.split577
  %227 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %32, ptr noundef nonnull align 8 dereferenceable(8) %227)
  invoke void @_ZN3HIR8TypeData10make_SliceENS0_10Data_SliceE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %31, ptr noundef nonnull %32)
          to label %228 unwind label %230

228:                                              ; preds = %226
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %31)
          to label %229 unwind label %232

229:                                              ; preds = %228
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %31) #10
  call void @_ZN3HIR8TypeData10Data_SliceD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %32) #10
  br label %.thread355

230:                                              ; preds = %226
  %231 = landingpad { ptr, i32 }
          cleanup
  br label %234

232:                                              ; preds = %228
  %233 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %31) #10
  br label %234

234:                                              ; preds = %232, %230
  %.pn314 = phi { ptr, i32 } [ %233, %232 ], [ %231, %230 ]
  call void @_ZN3HIR8TypeData10Data_SliceD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %32) #10
  br label %349

235:                                              ; preds = %.split577
  %236 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %33) #10
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #10
  %237 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %236) #10
  store ptr %237, ptr %34, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #10
  %238 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %236) #10
  store ptr %238, ptr %35, align 8
  %239 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %35) #10
  br i1 %239, label %.lr.ph442, label %._crit_edge443

._crit_edge443:                                   ; preds = %242, %235
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  invoke void @_ZN3HIR8TypeData10make_TupleESt6vectorINS_7TypeRefESaIS2_EE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %37, ptr noundef nonnull %38)
          to label %250 unwind label %252

.lr.ph442:                                        ; preds = %235, %242
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #10
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %36, ptr noundef nonnull align 8 dereferenceable(8) %240)
          to label %241 unwind label %245

241:                                              ; preds = %.lr.ph442
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 8 dereferenceable(8) %36)
          to label %242 unwind label %247

242:                                              ; preds = %241
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #10
  %243 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  %244 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %35) #10
  br i1 %244, label %.lr.ph442, label %._crit_edge443

245:                                              ; preds = %.lr.ph442
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %249

247:                                              ; preds = %241
  %248 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  br label %249

249:                                              ; preds = %247, %245
  %.pn311 = phi { ptr, i32 } [ %248, %247 ], [ %246, %245 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  br label %257

250:                                              ; preds = %._crit_edge443
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %37)
          to label %251 unwind label %254

251:                                              ; preds = %250
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %37) #10
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #10
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #10
  br label %.thread355

252:                                              ; preds = %._crit_edge443
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %256

254:                                              ; preds = %250
  %255 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %37) #10
  br label %256

256:                                              ; preds = %254, %252
  %.pn309 = phi { ptr, i32 } [ %255, %254 ], [ %253, %252 ]
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #10
  br label %257

257:                                              ; preds = %256, %249
  %.pn311.pn = phi { ptr, i32 } [ %.pn311, %249 ], [ %.pn309, %256 ]
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #10
  br label %349

258:                                              ; preds = %.split577
  %259 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %260 = load <2 x i32>, ptr %259, align 8, !tbaa !34
  store <2 x i32> %260, ptr %40, align 8, !tbaa !34
  %261 = getelementptr inbounds i8, ptr %40, i64 8
  %262 = getelementptr inbounds i8, ptr %259, i64 8
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %261, ptr noundef nonnull align 8 dereferenceable(8) %262)
  invoke void @_ZN3HIR8TypeData11make_BorrowENS0_11Data_BorrowE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %39, ptr noundef nonnull %40)
          to label %263 unwind label %265

263:                                              ; preds = %258
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %39)
          to label %264 unwind label %267

264:                                              ; preds = %263
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %39) #10
  call void @_ZN3HIR8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %40) #10
  br label %.thread355

265:                                              ; preds = %258
  %266 = landingpad { ptr, i32 }
          cleanup
  br label %269

267:                                              ; preds = %263
  %268 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %39) #10
  br label %269

269:                                              ; preds = %267, %265
  %.pn307 = phi { ptr, i32 } [ %268, %267 ], [ %266, %265 ]
  call void @_ZN3HIR8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %40) #10
  br label %349

270:                                              ; preds = %.split577
  %271 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %272 = load i32, ptr %271, align 8, !tbaa !35
  store i32 %272, ptr %42, align 8, !tbaa !35
  %273 = getelementptr inbounds i8, ptr %42, i64 8
  %274 = getelementptr inbounds i8, ptr %271, i64 8
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %273, ptr noundef nonnull align 8 dereferenceable(8) %274)
  invoke void @_ZN3HIR8TypeData12make_PointerENS0_12Data_PointerE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %41, ptr noundef nonnull %42)
          to label %275 unwind label %277

275:                                              ; preds = %270
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %41)
          to label %276 unwind label %279

276:                                              ; preds = %275
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %41) #10
  call void @_ZN3HIR8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %42) #10
  br label %.thread355

277:                                              ; preds = %270
  %278 = landingpad { ptr, i32 }
          cleanup
  br label %281

279:                                              ; preds = %275
  %280 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %41) #10
  br label %281

281:                                              ; preds = %279, %277
  %.pn305 = phi { ptr, i32 } [ %280, %279 ], [ %278, %277 ]
  call void @_ZN3HIR8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %42) #10
  br label %349

282:                                              ; preds = %.split577
  %283 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %44, ptr noundef nonnull align 8 dereferenceable(88) %283)
  %284 = getelementptr inbounds i8, ptr %44, i64 88
  %285 = getelementptr inbounds i8, ptr %283, i64 88
  invoke void @_ZNK3HIR25TypeData_NamedFunction_Ty5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8 %284, ptr noundef nonnull align 8 dereferenceable(24) %285)
          to label %286 unwind label %289

286:                                              ; preds = %282
  invoke void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %43, ptr noundef nonnull %44)
          to label %287 unwind label %291

287:                                              ; preds = %286
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %43)
          to label %288 unwind label %293

288:                                              ; preds = %287
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %43) #10
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %44) #10
  br label %.thread355

289:                                              ; preds = %282
  %290 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %44) #10
  br label %349

291:                                              ; preds = %286
  %292 = landingpad { ptr, i32 }
          cleanup
  br label %295

293:                                              ; preds = %287
  %294 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %43) #10
  br label %295

295:                                              ; preds = %293, %291
  %.pn302 = phi { ptr, i32 } [ %294, %293 ], [ %292, %291 ]
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %44) #10
  br label %349

296:                                              ; preds = %.split577
  %297 = getelementptr inbounds i8, ptr %45, i64 112
  %298 = getelementptr inbounds i8, ptr %45, i64 97
  %299 = getelementptr inbounds i8, ptr %45, i64 96
  %300 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %45) #10
  call void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::GenericParams") align 8 %45, ptr noundef nonnull align 8 dereferenceable(96) %300)
  %301 = getelementptr inbounds i8, ptr %300, i64 96
  %302 = load i8, ptr %301, align 8, !tbaa !39, !range !27, !noundef !28
  store i8 %302, ptr %299, align 8, !tbaa !39
  %303 = getelementptr inbounds i8, ptr %300, i64 97
  %304 = load i8, ptr %303, align 1, !tbaa !63, !range !27, !noundef !28
  store i8 %304, ptr %298, align 1, !tbaa !63
  %305 = getelementptr inbounds i8, ptr %300, i64 104
  call void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(8) %305)
  %306 = getelementptr inbounds i8, ptr %300, i64 112
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %297, ptr noundef nonnull align 8 dereferenceable(8) %306)
          to label %307 unwind label %312

307:                                              ; preds = %296
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %54, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %54) #10
  %308 = getelementptr inbounds i8, ptr %300, i64 120
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #10
  %309 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %308) #10
  store ptr %309, ptr %46, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #10
  %310 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %308) #10
  store ptr %310, ptr %47, align 8
  %311 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #10
  br i1 %311, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %316, %307
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #10
  invoke void @_ZN3HIR24TypeData_FunctionPointerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(144) %50, ptr noundef nonnull align 8 dereferenceable(144) %45)
          to label %324 unwind label %327

312:                                              ; preds = %296
  %313 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %45) #10
  br label %335

.lr.ph:                                           ; preds = %307, %316
  %314 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #10
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %48, ptr noundef nonnull align 8 dereferenceable(8) %314)
          to label %315 unwind label %319

315:                                              ; preds = %.lr.ph
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %54, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %316 unwind label %321

316:                                              ; preds = %315
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #10
  %317 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  %318 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #10
  br i1 %318, label %.lr.ph, label %._crit_edge

319:                                              ; preds = %.lr.ph
  %320 = landingpad { ptr, i32 }
          cleanup
  br label %323

321:                                              ; preds = %315
  %322 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %48) #10
  br label %323

323:                                              ; preds = %321, %319
  %.pn298 = phi { ptr, i32 } [ %322, %321 ], [ %320, %319 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #10
  br label %334

324:                                              ; preds = %._crit_edge
  invoke void @_ZN3HIR8TypeData13make_FunctionENS_24TypeData_FunctionPointerE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %49, ptr noundef nonnull %50)
          to label %325 unwind label %329

325:                                              ; preds = %324
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %49)
          to label %326 unwind label %331

326:                                              ; preds = %325
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %49) #10
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %50) #10
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %45) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %45) #10
  br label %.thread355

327:                                              ; preds = %._crit_edge
  %328 = landingpad { ptr, i32 }
          cleanup
  br label %334

329:                                              ; preds = %324
  %330 = landingpad { ptr, i32 }
          cleanup
  br label %333

331:                                              ; preds = %325
  %332 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %49) #10
  br label %333

333:                                              ; preds = %331, %329
  %.pn = phi { ptr, i32 } [ %332, %331 ], [ %330, %329 ]
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %50) #10
  br label %334

334:                                              ; preds = %333, %327, %323
  %.pn298.pn = phi { ptr, i32 } [ %.pn298, %323 ], [ %.pn, %333 ], [ %328, %327 ]
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %45) #10
  br label %335

335:                                              ; preds = %334, %312
  %.pn298.pn.pn = phi { ptr, i32 } [ %.pn298.pn, %334 ], [ %313, %312 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %45) #10
  br label %349

336:                                              ; preds = %.split577
  %337 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %338 = load ptr, ptr %337, align 8, !tbaa !64
  call void @_ZN3HIR8TypeData12make_ClosureENS0_12Data_ClosureE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %51, ptr %338)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %51)
          to label %339 unwind label %340

339:                                              ; preds = %336
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %51) #10
  br label %.thread355

340:                                              ; preds = %336
  %341 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %51) #10
  br label %349

342:                                              ; preds = %.split577
  %343 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %344 = load ptr, ptr %343, align 8, !tbaa !66
  call void @_ZN3HIR8TypeData14make_GeneratorENS0_14Data_GeneratorE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %52, ptr %344)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %52)
          to label %345 unwind label %346

345:                                              ; preds = %342
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %52) #10
  br label %.thread355

346:                                              ; preds = %342
  %347 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %52) #10
  br label %349

.critedge.backedge:                               ; preds = %.split577
  %348 = tail call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.24, ptr %348, align 16, !tbaa !68
  tail call void @__cxa_throw(ptr nonnull %348, ptr nonnull @_ZTIPKc, ptr null) #11
  unreachable

349:                                              ; preds = %289, %295, %219, %225, %89, %95, %346, %340, %335, %281, %269, %257, %234, %211, %141, %104, %79, %73, %68
  %.pn348 = phi { ptr, i32 } [ %347, %346 ], [ %341, %340 ], [ %.pn298.pn.pn, %335 ], [ %.pn305, %281 ], [ %.pn307, %269 ], [ %.pn311.pn, %257 ], [ %.pn314, %234 ], [ %.pn333.pn, %211 ], [ %.pn340.pn, %141 ], [ %.pn343, %104 ], [ %80, %79 ], [ %74, %73 ], [ %69, %68 ], [ %.pn345, %95 ], [ %90, %89 ], [ %.pn316, %225 ], [ %220, %219 ], [ %.pn302, %295 ], [ %290, %289 ]
  resume { ptr, i32 } %.pn348

.thread355:                                       ; preds = %326, %251, %201, %133, %345, %339, %288, %276, %264, %229, %218, %99, %88, %78, %72, %67
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData10make_InferENS0_10Data_InferE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, i64) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData12make_DivergeENS0_12Data_DivergeE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData14make_PrimitiveENS_8CoreTypeE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData9make_PathENS_13TypeData_PathE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData12make_GenericENS_10GenericRefE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR20TypeData_TraitObjectC2Ev(ptr noundef nonnull align 8 dereferenceable(172)) unnamed_addr #8 align 2

declare void @_ZNK3HIR9TraitPath5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TraitPath") align 8, ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR9TraitPathaSEOS0_(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #4 align 2

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

declare void @_ZNK3HIR11GenericPath5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericPath") align 8, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData16make_TraitObjectENS_20TypeData_TraitObjectE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172)) unnamed_addr #4 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92)) unnamed_addr #4 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData15make_ErasedTypeENS_19TypeData_ErasedTypeE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData10make_ArrayENS0_10Data_ArrayE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData10make_SliceENS0_10Data_SliceE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData10make_TupleESt6vectorINS_7TypeRefESaIS2_EE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData11make_BorrowENS0_11Data_BorrowE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData12make_PointerENS0_12Data_PointerE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData13make_FunctionENS_24TypeData_FunctionPointerE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData12make_ClosureENS0_12Data_ClosureE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeData14make_GeneratorENS0_14Data_GeneratorE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeData") align 8, ptr) local_unnamed_addr #2 align 2

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

!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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !8, i64 0}
!8 = !{!"_ZTSN3HIR8CoreTypeE", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !9, i64 0}
!13 = !{!14, !15, i64 0}
!14 = !{!"_ZTSN3HIR19TypeData_ErasedTypeE", !15, i64 0, !16, i64 8, !21, i64 32, !25, i64 56}
!15 = !{!"bool", !9, i64 0}
!16 = !{!"_ZTSSt6vectorIN3HIR9TraitPathESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!20 = !{!"any pointer", !9, i64 0}
!21 = !{!"_ZTSSt6vectorIN3HIR11LifetimeRefESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!25 = !{!"_ZTSN3HIR25TypeData_ErasedType_InnerE", !26, i64 0, !9, i64 8}
!26 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner3TagE", !9, i64 0}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!30, !12, i64 88}
!30 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner8Data_FcnE", !31, i64 0, !12, i64 88}
!31 = !{!"_ZTSN3HIR4PathE", !32, i64 0}
!32 = !{!"_ZTSN3HIR4Path4DataE", !33, i64 0, !9, i64 8}
!33 = !{!"_ZTSN3HIR4Path4Data3TagE", !9, i64 0}
!34 = !{!9, !9, i64 0}
!35 = !{!36, !37, i64 0}
!36 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !37, i64 0, !38, i64 8}
!37 = !{!"_ZTSN3HIR10BorrowTypeE", !9, i64 0}
!38 = !{!"_ZTSN3HIR7TypeRefE", !20, i64 0}
!39 = !{!40, !15, i64 96}
!40 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !41, i64 0, !15, i64 96, !15, i64 97, !58, i64 104, !38, i64 112, !59, i64 120}
!41 = !{!"_ZTSN3HIR13GenericParamsE", !42, i64 0, !46, i64 24, !50, i64 48, !54, i64 72}
!42 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !43, i64 0}
!43 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!46 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!50 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !51, i64 0}
!51 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!54 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!58 = !{!"_ZTS8RcString", !20, i64 0}
!59 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!63 = !{!40, !15, i64 97}
!64 = !{!65, !20, i64 0}
!65 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !20, i64 0}
!66 = !{!67, !20, i64 0}
!67 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !20, i64 0}
!68 = !{!20, !20, i64 0}


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