; LLVM IR from thepowersgang/mrustc :: src/hir_typeck (static)

; 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::TypeRef" = type { ptr }
%"struct.std::pair.588" = type <{ %"class.HIR::TypeRef", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator.579" = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.17, %class.ThinVector.18, %class.ThinVector.19 }
%class.ThinVector.17 = type { ptr }
%class.ThinVector.18 = type { ptr }
%class.ThinVector.19 = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.625 = type { i8 }
%"struct.std::pair.585" = type <{ %"struct.std::_Rb_tree_iterator.579", i8, [7 x i8] }>
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.401" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.401" = type { %"struct.std::_Vector_base.402" }
%"struct.std::_Vector_base.402" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.627 = type { ptr, ptr, ptr, ptr }
%struct.Span = type { ptr }
%"class.std::function.0" = type { %"class.std::_Function_base", ptr }
%class.anon.628 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.507" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.511" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.514" = type { ptr }
%class.anon.630 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.518" = type { ptr }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_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" }
%"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.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"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.46" }
%"struct.std::_Head_base.46" = type { ptr }
%struct.TraitResolveCommon = type { ptr, ptr, ptr, %"class.std::map.23", %class.RangeVecMap, %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath" }
%"class.std::map.23" = type { %"class.std::_Rb_tree.24" }
%"class.std::_Rb_tree.24" = type { %"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>, std::_Select1st<std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>, std::_Select1st<std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>>, std::less<HIR::TypeRef>>::_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.RangeVecMap = type <{ %"class.std::vector.29", [8 x i8] }>
%"class.std::vector.29" = type { %"struct.std::_Vector_base.30" }
%"struct.std::_Vector_base.30" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.StaticTraitResolve = type { ptr, %struct.TraitResolveCommon, i32, %"class.std::map.34", %"class.std::map.34", %"class.std::map.34", %"class.std::map.39" }
%"class.std::map.34" = type { %"class.std::_Rb_tree.35" }
%"class.std::_Rb_tree.35" = type { %"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, bool>, std::_Select1st<std::pair<const HIR::TypeRef, bool>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, bool>, std::_Select1st<std::pair<const HIR::TypeRef, bool>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.39" = type { %"class.std::_Rb_tree.40" }
%"class.std::_Rb_tree.40" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, HIR::TypeRef>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, HIR::TypeRef>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, HIR::TypeRef>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, HIR::TypeRef>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::pair.580" = type <{ %"class.HIR::TypeRef", i8, [7 x i8] }>
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"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 }
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.252" }
%"class.std::vector.252" = type { %"struct.std::_Vector_base.253" }
%"struct.std::_Vector_base.253" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TraitMarkings" = type { i8, i8, i8, %"class.std::map.91" }
%"class.std::map.91" = type { %"class.std::_Rb_tree.92" }
%"class.std::_Rb_tree.92" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%"struct.HIR::VisEnt" = type { %"class.HIR::Publicity", %"class.HIR::TypeRef" }
%"class.HIR::Publicity" = type { %"class.std::shared_ptr.508" }
%"class.std::shared_ptr.508" = type { %"class.std::__shared_ptr.509" }
%"class.std::__shared_ptr.509" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.std::pair.512" = type { %class.RcString, %"struct.HIR::VisEnt" }
%"class.HIR::Enum" = type { %"class.HIR::GenericParams", i8, i32, %"class.HIR::Enum::Class", %"struct.HIR::TraitMarkings" }
%"class.HIR::Enum::Class" = type { i32, %"union.HIR::Enum::Class::DataUnion" }
%"union.HIR::Enum::Class::DataUnion" = type { %"class.std::vector.81", [8 x i8] }
%"class.std::vector.81" = type { %"struct.std::_Vector_base.82" }
%"struct.std::_Vector_base.82" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::Enum::DataVariant" = type { %class.RcString, i8, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::LifetimeRef" = type { i32 }
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"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.67", [8 x i8] }
%"class.std::unique_ptr.67" = type { %"struct.std::__uniq_ptr_data.68" }
%"struct.std::__uniq_ptr_data.68" = type { %"class.std::__uniq_ptr_impl.69" }
%"class.std::__uniq_ptr_impl.69" = type { %"class.std::tuple.70" }
%"class.std::tuple.70" = type { %"struct.std::_Tuple_impl.71" }
%"struct.std::_Tuple_impl.71" = type { %"struct.std::_Head_base.74" }
%"struct.std::_Head_base.74" = type { ptr }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }

@gTargetVersion = external global i32, align 4
@.str = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.4 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [80 x i8], align 1
@__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE = external hidden unnamed_addr constant [90 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [44 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve9find_implERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEEb(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, i1 noundef zeroext) #0 align 2

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

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR10SimplePatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve12type_is_copyERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #0 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)) #3 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)) #4 align 2

declare void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2

declare void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2

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

declare ptr @__cxa_allocate_exception(i64)

declare void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #2

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR15TypePathBinding9is_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

declare void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 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)) #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184)) #4 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)) #4 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR5Crate22get_lang_item_path_optEPKc(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef) #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)) #4 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)) #4 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)) #4 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)) #4 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)) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #4 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)) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding9as_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding10as_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 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)) #3

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(9)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.588") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9)) unnamed_addr #3 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)) #4 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)) #4 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)) #4 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)) #4 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)) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca ptr, align 8
  %15 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %16 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %17 = alloca %"struct.HIR::PathParams", align 8
  %18 = alloca i8, align 1
  %19 = alloca %"class.std::function", align 8
  %20 = alloca %class.anon.625, align 1
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %"struct.std::pair.588", align 8
  %24 = alloca %"class.HIR::TypeRef", align 8
  %25 = alloca i8, align 1
  %26 = alloca %"struct.std::pair.585", align 8
  %27 = alloca %"class.HIR::TypeRef", align 8
  %28 = alloca ptr, align 8
  %29 = alloca %struct.MonomorphStatePtr, align 8
  %30 = alloca %class.anon.627, align 8
  %31 = alloca i8, align 1
  %32 = alloca ptr, align 8
  %33 = alloca %struct.Span, align 8
  %34 = alloca %"class.std::function.0", align 8
  %35 = alloca %class.anon.628, align 1
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.507", align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator.507", align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca %"class.__gnu_cxx::__normal_iterator.511", align 8
  %47 = alloca %"class.__gnu_cxx::__normal_iterator.511", align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca %"class.__gnu_cxx::__normal_iterator.514", align 8
  %53 = alloca %"class.__gnu_cxx::__normal_iterator.514", align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca %"struct.std::pair.588", align 8
  %58 = alloca %"class.HIR::TypeRef", align 8
  %59 = alloca %"struct.std::pair.585", align 8
  %60 = alloca i8, align 1
  %61 = alloca ptr, align 8
  %62 = alloca i8, align 1
  %63 = alloca ptr, align 8
  %64 = alloca i8, align 1
  %65 = alloca ptr, align 8
  %66 = alloca i8, align 1
  %67 = alloca ptr, align 8
  %68 = alloca %struct.Span, align 8
  %69 = alloca %"class.std::function.0", align 8
  %70 = alloca %class.anon.630, align 1
  %71 = alloca i8, align 1
  %72 = alloca ptr, align 8
  %73 = alloca i8, align 1
  %74 = alloca ptr, align 8
  %75 = alloca i8, align 1
  %76 = alloca ptr, align 8
  %77 = alloca i8, align 1
  %78 = alloca ptr, align 8
  %79 = alloca i8, align 1
  %80 = alloca ptr, align 8
  %81 = alloca i8, align 1
  %82 = alloca ptr, align 8
  %83 = alloca i8, align 1
  %84 = alloca ptr, align 8
  %85 = alloca i8, align 1
  %86 = alloca ptr, align 8
  %87 = alloca i8, align 1
  %88 = alloca ptr, align 8
  %89 = alloca i8, align 1
  %90 = alloca ptr, align 8
  %91 = alloca ptr, align 8
  %92 = alloca %"class.__gnu_cxx::__normal_iterator.518", align 8
  %93 = alloca %"class.__gnu_cxx::__normal_iterator.518", align 8
  %94 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  %95 = load ptr, ptr %5, align 8
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = load ptr, ptr %7, align 8, !tbaa !5
  %98 = call noundef zeroext i1 @_ZNK18StaticTraitResolve12type_is_copyERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef nonnull align 8 dereferenceable(8) %97)
  br i1 %98, label %99, label %100

99:                                               ; preds = %3
  store i1 false, ptr %4, align 1
  br label %917

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

101:                                              ; preds = %913, %100
  %102 = load i8, ptr %8, align 1, !tbaa !9, !range !11, !noundef !12
  %103 = trunc i8 %102 to i1
  br i1 %103, label %105, label %104

104:                                              ; preds = %101
  store i32 2, ptr %9, align 4
  br label %914

105:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %106 = load ptr, ptr %7, align 8, !tbaa !5
  %107 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %106)
  store ptr %107, ptr %10, align 8, !tbaa !5
  br label %108

108:                                              ; preds = %908, %105
  %109 = load i8, ptr %8, align 1, !tbaa !9, !range !11, !noundef !12
  %110 = trunc i8 %109 to i1
  br i1 %110, label %112, label %111

111:                                              ; preds = %108
  store i32 5, ptr %9, align 4
  br label %909

112:                                              ; preds = %108
  %113 = load ptr, ptr %10, align 8, !tbaa !5
  %114 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %113)
  switch i32 %114, label %907 [
    i32 0, label %115
    i32 5, label %116
    i32 4, label %138
    i32 2, label %540
    i32 15, label %562
    i32 16, label %584
    i32 1, label %606
    i32 11, label %644
    i32 12, label %676
    i32 13, label %698
    i32 14, label %720
    i32 3, label %742
    i32 8, label %764
    i32 9, label %790
    i32 6, label %816
    i32 7, label %838
    i32 10, label %860
  ]

115:                                              ; preds = %112
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.5, i32 noundef 2912, ptr noundef @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE) #9
  unreachable

116:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #8
  store i8 1, ptr %11, align 1, !tbaa !9
  br label %117

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

120:                                              ; preds = %117
  store i32 9, ptr %9, align 4
  br label %135

121:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %122)
  store ptr %123, ptr %12, align 8, !tbaa !5
  br label %124

124:                                              ; preds = %130, %121
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = load i8, ptr %11, align 1, !tbaa !9, !range !11, !noundef !12
  %127 = trunc i8 %126 to i1
  br i1 %127, label %129, label %128

128:                                              ; preds = %124
  store i32 12, ptr %9, align 4
  br label %131

129:                                              ; preds = %124
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %131

130:                                              ; No predecessors!
  store i8 0, ptr %11, align 1, !tbaa !9
  br label %124, !llvm.loop !13

131:                                              ; preds = %129, %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  %132 = load i32, ptr %9, align 4
  switch i32 %132, label %135 [
    i32 12, label %133
  ]

133:                                              ; preds = %131
  br label %134

134:                                              ; preds = %133
  store i8 0, ptr %11, align 1, !tbaa !9
  br label %117, !llvm.loop !15

135:                                              ; preds = %131, %120
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #8
  %136 = load i32, ptr %9, align 4
  switch i32 %136, label %909 [
    i32 9, label %137
  ]

137:                                              ; preds = %135
  br label %907

138:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #8
  store i8 1, ptr %13, align 1, !tbaa !9
  br label %139

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

142:                                              ; preds = %139
  store i32 15, ptr %9, align 4
  br label %537

143:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %144 = load ptr, ptr %10, align 8, !tbaa !5
  %145 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %144)
  store ptr %145, ptr %14, align 8, !tbaa !5
  br label %146

146:                                              ; preds = %532, %143
  %147 = load ptr, ptr %14, align 8, !tbaa !5
  %148 = load i8, ptr %13, align 1, !tbaa !9, !range !11, !noundef !12
  %149 = trunc i8 %148 to i1
  br i1 %149, label %151, label %150

150:                                              ; preds = %146
  store i32 18, ptr %9, align 4
  br label %533

151:                                              ; preds = %146
  %152 = load ptr, ptr %14, align 8, !tbaa !5
  %153 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %152, i32 0, i32 1
  %154 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding9is_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16) %153)
  br i1 %154, label %155, label %156

155:                                              ; preds = %151
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %533

156:                                              ; preds = %151
  %157 = load i32, ptr @gTargetVersion, align 4, !tbaa !16
  %158 = icmp sge i32 %157, 1
  br i1 %158, label %159, label %171

159:                                              ; preds = %156
  %160 = load ptr, ptr %14, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %160, i32 0, i32 0
  %162 = getelementptr inbounds %"class.HIR::Path", ptr %161, i32 0, i32 0
  %163 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %162)
  %164 = getelementptr inbounds %"class.HIR::GenericPath", ptr %163, i32 0, i32 0
  %165 = getelementptr inbounds i8, ptr %95, i64 8
  %166 = getelementptr inbounds %struct.TraitResolveCommon, ptr %165, i32 0, i32 0
  %167 = load ptr, ptr %166, align 8, !tbaa !18
  %168 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR5Crate22get_lang_item_path_optEPKc(ptr noundef nonnull align 8 dereferenceable(944) %167, ptr noundef @.str.88)
  %169 = call noundef zeroext i1 @_ZNK3HIR10SimplePatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %164, ptr noundef nonnull align 8 dereferenceable(8) %168)
  br i1 %169, label %170, label %171

170:                                              ; preds = %159
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %533

171:                                              ; preds = %159, %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %172 = getelementptr inbounds %class.StaticTraitResolve, ptr %95, i32 0, i32 5
  %173 = load ptr, ptr %7, align 8, !tbaa !5
  %174 = call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %172, ptr noundef nonnull align 8 dereferenceable(8) %173)
  %175 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.579", ptr %15, i32 0, i32 0
  store ptr %174, ptr %175, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %176 = getelementptr inbounds %class.StaticTraitResolve, ptr %95, i32 0, i32 5
  %177 = call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %176) #8
  %178 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.579", ptr %16, i32 0, i32 0
  store ptr %177, ptr %178, align 8
  %179 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEES7_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br i1 %179, label %180, label %185

180:                                              ; preds = %171
  %181 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  %182 = getelementptr inbounds %"struct.std::pair.580", ptr %181, i32 0, i32 1
  %183 = load i8, ptr %182, align 8, !tbaa !37, !range !11, !noundef !12
  %184 = trunc i8 %183 to i1
  store i1 %184, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %531

185:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #8
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %17)
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #8
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %95, i64 8
  %188 = getelementptr inbounds %struct.TraitResolveCommon, ptr %187, i32 0, i32 7
  %189 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #8
  call void @"_ZNSt8functionIFb7ImplRefbEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(1) %20) #8
  %190 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve9find_implERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEEb(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %186, ptr noundef nonnull align 8 dereferenceable(8) %188, ptr noundef %17, ptr noundef nonnull align 8 dereferenceable(8) %189, ptr noundef %19, i1 noundef zeroext true)
          to label %191 unwind label %206

191:                                              ; preds = %185
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #8
  %192 = zext i1 %190 to i8
  store i8 %192, ptr %18, align 1, !tbaa !9
  %193 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %194 = trunc i8 %193 to i1
  br i1 %194, label %195, label %224

195:                                              ; preds = %191
  %196 = getelementptr inbounds %class.StaticTraitResolve, ptr %95, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %24, ptr noundef nonnull align 8 dereferenceable(8) %197)
          to label %198 unwind label %210

198:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #8
  store i8 1, ptr %25, align 1, !tbaa !9
  invoke void @_ZSt9make_pairIN3HIR7TypeRefEbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS3_INS4_IT0_E4typeEE6__typeEEOS5_OSA_(ptr dead_on_unwind writable sret(%"struct.std::pair.588") align 8 %23, ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %199 unwind label %214

199:                                              ; preds = %198
  %200 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %196, ptr noundef nonnull align 8 dereferenceable(9) %23)
          to label %201 unwind label %218

201:                                              ; preds = %199
  %202 = getelementptr inbounds { ptr, i8 }, ptr %26, i32 0, i32 0
  %203 = extractvalue { ptr, i8 } %200, 0
  store ptr %203, ptr %202, align 8
  %204 = getelementptr inbounds { ptr, i8 }, ptr %26, i32 0, i32 1
  %205 = extractvalue { ptr, i8 } %200, 1
  store i8 %205, ptr %204, align 8
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #8
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %529

206:                                              ; preds = %185
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %21, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #8
  br label %530

210:                                              ; preds = %195
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %21, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %22, align 4
  br label %223

214:                                              ; preds = %198
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %21, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %22, align 4
  br label %222

218:                                              ; preds = %199
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %21, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %22, align 4
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %23) #8
  br label %222

222:                                              ; preds = %218, %214
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  br label %223

223:                                              ; preds = %222, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #8
  br label %530

224:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %225 unwind label %243

225:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %226 = load ptr, ptr %14, align 8, !tbaa !5
  %227 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %226, i32 0, i32 0
  %228 = getelementptr inbounds %"class.HIR::Path", ptr %227, i32 0, i32 0
  %229 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %228)
          to label %230 unwind label %247

230:                                              ; preds = %225
  store ptr %229, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr %29) #8
  %231 = load ptr, ptr %28, align 8, !tbaa !5
  %232 = getelementptr inbounds %"class.HIR::GenericPath", ptr %231, i32 0, i32 1
  invoke void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %29, ptr noundef null, ptr noundef %232, ptr noundef null, ptr noundef null, ptr noundef null)
          to label %233 unwind label %251

233:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #8
  %234 = getelementptr inbounds %class.anon.627, ptr %30, i32 0, i32 0
  store ptr %95, ptr %234, align 8, !tbaa !40
  %235 = getelementptr inbounds %class.anon.627, ptr %30, i32 0, i32 1
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %236, ptr %235, align 8, !tbaa !5
  %237 = getelementptr inbounds %class.anon.627, ptr %30, i32 0, i32 2
  store ptr %27, ptr %237, align 8, !tbaa !5
  %238 = getelementptr inbounds %class.anon.627, ptr %30, i32 0, i32 3
  store ptr %29, ptr %238, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #8
  store i8 0, ptr %31, align 1, !tbaa !9
  %239 = load ptr, ptr %14, align 8, !tbaa !5
  %240 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %239, i32 0, i32 1
  %241 = invoke noundef i32 @_ZNK3HIR15TypePathBinding3tagEv(ptr noundef nonnull align 8 dereferenceable(16) %240)
          to label %242 unwind label %255

242:                                              ; preds = %233
  switch i32 %241, label %497 [
    i32 0, label %259
    i32 1, label %260
    i32 2, label %292
    i32 4, label %302
    i32 6, label %420
    i32 5, label %477
    i32 3, label %487
  ]

243:                                              ; preds = %224
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %21, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %22, align 4
  br label %528

247:                                              ; preds = %225
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %21, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %22, align 4
  br label %527

251:                                              ; preds = %230
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %21, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %22, align 4
  br label %526

255:                                              ; preds = %233
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %21, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %22, align 4
  br label %525

259:                                              ; preds = %242
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.5, i32 noundef 3003, ptr noundef @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE) #9
  unreachable

260:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %261 = load ptr, ptr %14, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %261, i32 0, i32 1
  %263 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding10as_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %262)
          to label %264 unwind label %272

264:                                              ; preds = %260
  store ptr %263, ptr %32, align 8, !tbaa !5
  %265 = load ptr, ptr %32, align 8, !tbaa !5
  br label %266

266:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %267 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %267)
          to label %268 unwind label %276

268:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(1) %35) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef %34)
          to label %269 unwind label %280

269:                                              ; preds = %268
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  %270 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %270, ptr noundef @.str)
          to label %271 unwind label %285

271:                                              ; preds = %269
  invoke void @__cxa_throw(ptr %270, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %924 unwind label %272

272:                                              ; preds = %271, %260
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %21, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %22, align 4
  br label %291

276:                                              ; preds = %266
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %21, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %22, align 4
  br label %284

280:                                              ; preds = %268
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %21, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #8
  br label %284

284:                                              ; preds = %280, %276
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %291

285:                                              ; preds = %269
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %21, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %22, align 4
  call void @__cxa_free_exception(ptr %270) #8
  br label %291

289:                                              ; No predecessors!
  br label %290

290:                                              ; preds = %289
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %497

291:                                              ; preds = %285, %284, %272
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %525

292:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %293 = load ptr, ptr %14, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %293, i32 0, i32 1
  %295 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding9as_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16) %294)
          to label %296 unwind label %298

296:                                              ; preds = %292
  store ptr %295, ptr %36, align 8, !tbaa !5
  %297 = load ptr, ptr %36, align 8, !tbaa !5
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %524

298:                                              ; preds = %292
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %21, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %525

302:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %303 = load ptr, ptr %14, align 8, !tbaa !5
  %304 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %303, i32 0, i32 1
  %305 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %304)
          to label %306 unwind label %313

306:                                              ; preds = %302
  store ptr %305, ptr %37, align 8, !tbaa !5
  %307 = load ptr, ptr %37, align 8, !tbaa !5
  %308 = load ptr, ptr %37, align 8, !tbaa !5
  %309 = load ptr, ptr %308, align 8, !tbaa !5
  %310 = getelementptr inbounds %"class.HIR::Struct", ptr %309, i32 0, i32 3
  %311 = invoke noundef i32 @_ZNK3HIR6Struct4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(32) %310)
          to label %312 unwind label %313

312:                                              ; preds = %306
  switch i32 %311, label %418 [
    i32 0, label %317
    i32 1, label %318
    i32 2, label %329
    i32 3, label %373
  ]

313:                                              ; preds = %306, %302
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %21, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %22, align 4
  br label %419

317:                                              ; preds = %312
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.5, i32 noundef 2980, ptr noundef @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE) #9
  unreachable

318:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %319 = load ptr, ptr %37, align 8, !tbaa !5
  %320 = load ptr, ptr %319, align 8, !tbaa !5
  %321 = getelementptr inbounds %"class.HIR::Struct", ptr %320, i32 0, i32 3
  %322 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR6Struct4Data7as_UnitEv(ptr noundef nonnull align 8 dereferenceable(32) %321)
          to label %323 unwind label %325

323:                                              ; preds = %318
  store ptr %322, ptr %38, align 8, !tbaa !5
  %324 = load ptr, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  br label %418

325:                                              ; preds = %318
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %21, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  br label %419

329:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %330 = load ptr, ptr %37, align 8, !tbaa !5
  %331 = load ptr, ptr %330, align 8, !tbaa !5
  %332 = getelementptr inbounds %"class.HIR::Struct", ptr %331, i32 0, i32 3
  %333 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %332)
          to label %334 unwind label %346

334:                                              ; preds = %329
  store ptr %333, ptr %39, align 8, !tbaa !5
  %335 = load ptr, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %336 = load ptr, ptr %39, align 8, !tbaa !5
  store ptr %336, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %337 = load ptr, ptr %40, align 8, !tbaa !5
  %338 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %337) #8
  %339 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.507", ptr %41, i32 0, i32 0
  store ptr %338, ptr %339, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %340 = load ptr, ptr %40, align 8, !tbaa !5
  %341 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %340) #8
  %342 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.507", ptr %42, i32 0, i32 0
  store ptr %341, ptr %342, align 8
  br label %343

343:                                              ; preds = %368, %334
  %344 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  br i1 %344, label %350, label %345

345:                                              ; preds = %343
  store i32 25, ptr %9, align 4
  br label %370

346:                                              ; preds = %329
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %21, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %22, align 4
  br label %372

350:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %351 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  store ptr %351, ptr %43, align 8, !tbaa !5
  %352 = load ptr, ptr %6, align 8, !tbaa !5
  %353 = load ptr, ptr %43, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %353, i32 0, i32 1
  %355 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEENK3$_2clIS4_EES6_RKT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(8) %354)
          to label %356 unwind label %360

356:                                              ; preds = %350
  %357 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %352, ptr noundef nonnull align 8 dereferenceable(8) %355)
          to label %358 unwind label %360

358:                                              ; preds = %356
  br i1 %357, label %359, label %364

359:                                              ; preds = %358
  store i8 1, ptr %31, align 1, !tbaa !9
  store i32 25, ptr %9, align 4
  br label %365

360:                                              ; preds = %356, %350
  %361 = landingpad { ptr, i32 }
          cleanup
  %362 = extractvalue { ptr, i32 } %361, 0
  store ptr %362, ptr %21, align 8
  %363 = extractvalue { ptr, i32 } %361, 1
  store i32 %363, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  br label %372

364:                                              ; preds = %358
  store i32 0, ptr %9, align 4
  br label %365

365:                                              ; preds = %364, %359
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  %366 = load i32, ptr %9, align 4
  switch i32 %366, label %370 [
    i32 0, label %367
  ]

367:                                              ; preds = %365
  br label %368

368:                                              ; preds = %367
  %369 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  br label %343

370:                                              ; preds = %365, %345
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  br label %371

371:                                              ; preds = %370
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %418

372:                                              ; preds = %360, %346
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %419

373:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  %374 = load ptr, ptr %37, align 8, !tbaa !5
  %375 = load ptr, ptr %374, align 8, !tbaa !5
  %376 = getelementptr inbounds %"class.HIR::Struct", ptr %375, i32 0, i32 3
  %377 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_NamedEv(ptr noundef nonnull align 8 dereferenceable(32) %376)
          to label %378 unwind label %390

378:                                              ; preds = %373
  store ptr %377, ptr %44, align 8, !tbaa !5
  %379 = load ptr, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %380 = load ptr, ptr %44, align 8, !tbaa !5
  store ptr %380, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %381 = load ptr, ptr %45, align 8, !tbaa !5
  %382 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %381) #8
  %383 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.511", ptr %46, i32 0, i32 0
  store ptr %382, ptr %383, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %384 = load ptr, ptr %45, align 8, !tbaa !5
  %385 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %384) #8
  %386 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.511", ptr %47, i32 0, i32 0
  store ptr %385, ptr %386, align 8
  br label %387

387:                                              ; preds = %413, %378
  %388 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #8
  br i1 %388, label %394, label %389

389:                                              ; preds = %387
  store i32 27, ptr %9, align 4
  br label %415

390:                                              ; preds = %373
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %21, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %22, align 4
  br label %417

394:                                              ; preds = %387
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %395 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #8
  store ptr %395, ptr %48, align 8, !tbaa !5
  %396 = load ptr, ptr %6, align 8, !tbaa !5
  %397 = load ptr, ptr %48, align 8, !tbaa !5
  %398 = getelementptr inbounds %"struct.std::pair.512", ptr %397, i32 0, i32 1
  %399 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %398, i32 0, i32 1
  %400 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEENK3$_2clIS4_EES6_RKT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(8) %399)
          to label %401 unwind label %405

401:                                              ; preds = %394
  %402 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %396, ptr noundef nonnull align 8 dereferenceable(8) %400)
          to label %403 unwind label %405

403:                                              ; preds = %401
  br i1 %402, label %404, label %409

404:                                              ; preds = %403
  store i8 1, ptr %31, align 1, !tbaa !9
  store i32 27, ptr %9, align 4
  br label %410

405:                                              ; preds = %401, %394
  %406 = landingpad { ptr, i32 }
          cleanup
  %407 = extractvalue { ptr, i32 } %406, 0
  store ptr %407, ptr %21, align 8
  %408 = extractvalue { ptr, i32 } %406, 1
  store i32 %408, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %417

409:                                              ; preds = %403
  store i32 0, ptr %9, align 4
  br label %410

410:                                              ; preds = %409, %404
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  %411 = load i32, ptr %9, align 4
  switch i32 %411, label %415 [
    i32 0, label %412
  ]

412:                                              ; preds = %410
  br label %413

413:                                              ; preds = %412
  %414 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #8
  br label %387

415:                                              ; preds = %410, %389
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %416

416:                                              ; preds = %415
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %418

417:                                              ; preds = %405, %390
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %419

418:                                              ; preds = %416, %371, %323, %312
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %497

419:                                              ; preds = %417, %372, %325, %313
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %525

420:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %421 = load ptr, ptr %14, align 8, !tbaa !5
  %422 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %421, i32 0, i32 1
  %423 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %422)
          to label %424 unwind label %444

424:                                              ; preds = %420
  store ptr %423, ptr %49, align 8, !tbaa !5
  %425 = load ptr, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  %426 = load ptr, ptr %49, align 8, !tbaa !5
  %427 = load ptr, ptr %426, align 8, !tbaa !5
  %428 = getelementptr inbounds %"class.HIR::Enum", ptr %427, i32 0, i32 3
  %429 = invoke noundef ptr @_ZNK3HIR4Enum5Class8opt_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %428)
          to label %430 unwind label %448

430:                                              ; preds = %424
  store ptr %429, ptr %50, align 8, !tbaa !5
  %431 = load ptr, ptr %50, align 8, !tbaa !5
  %432 = icmp ne ptr %431, null
  br i1 %432, label %433, label %474

433:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  %434 = load ptr, ptr %50, align 8, !tbaa !5
  store ptr %434, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %435 = load ptr, ptr %51, align 8, !tbaa !5
  %436 = call ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %435) #8
  %437 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.514", ptr %52, i32 0, i32 0
  store ptr %436, ptr %437, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %438 = load ptr, ptr %51, align 8, !tbaa !5
  %439 = call ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %438) #8
  %440 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.514", ptr %53, i32 0, i32 0
  store ptr %439, ptr %440, align 8
  br label %441

441:                                              ; preds = %470, %433
  %442 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  br i1 %442, label %452, label %443

443:                                              ; preds = %441
  store i32 29, ptr %9, align 4
  br label %472

444:                                              ; preds = %420
  %445 = landingpad { ptr, i32 }
          cleanup
  %446 = extractvalue { ptr, i32 } %445, 0
  store ptr %446, ptr %21, align 8
  %447 = extractvalue { ptr, i32 } %445, 1
  store i32 %447, ptr %22, align 4
  br label %476

448:                                              ; preds = %424
  %449 = landingpad { ptr, i32 }
          cleanup
  %450 = extractvalue { ptr, i32 } %449, 0
  store ptr %450, ptr %21, align 8
  %451 = extractvalue { ptr, i32 } %449, 1
  store i32 %451, ptr %22, align 4
  br label %475

452:                                              ; preds = %441
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %453 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  store ptr %453, ptr %54, align 8, !tbaa !5
  %454 = load ptr, ptr %6, align 8, !tbaa !5
  %455 = load ptr, ptr %54, align 8, !tbaa !5
  %456 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %455, i32 0, i32 2
  %457 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEENK3$_2clIS4_EES6_RKT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(8) %456)
          to label %458 unwind label %462

458:                                              ; preds = %452
  %459 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %454, ptr noundef nonnull align 8 dereferenceable(8) %457)
          to label %460 unwind label %462

460:                                              ; preds = %458
  br i1 %459, label %461, label %466

461:                                              ; preds = %460
  store i8 1, ptr %31, align 1, !tbaa !9
  store i32 29, ptr %9, align 4
  br label %467

462:                                              ; preds = %458, %452
  %463 = landingpad { ptr, i32 }
          cleanup
  %464 = extractvalue { ptr, i32 } %463, 0
  store ptr %464, ptr %21, align 8
  %465 = extractvalue { ptr, i32 } %463, 1
  store i32 %465, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br label %475

466:                                              ; preds = %460
  store i32 0, ptr %9, align 4
  br label %467

467:                                              ; preds = %466, %461
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  %468 = load i32, ptr %9, align 4
  switch i32 %468, label %472 [
    i32 0, label %469
  ]

469:                                              ; preds = %467
  br label %470

470:                                              ; preds = %469
  %471 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  br label %441

472:                                              ; preds = %467, %443
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br label %473

473:                                              ; preds = %472
  br label %474

474:                                              ; preds = %473, %430
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  br label %497

475:                                              ; preds = %462, %448
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  br label %476

476:                                              ; preds = %475, %444
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  br label %525

477:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %478 = load ptr, ptr %14, align 8, !tbaa !5
  %479 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %478, i32 0, i32 1
  %480 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding8as_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %479)
          to label %481 unwind label %483

481:                                              ; preds = %477
  store ptr %480, ptr %55, align 8, !tbaa !5
  %482 = load ptr, ptr %55, align 8, !tbaa !5
  store i8 0, ptr %31, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  br label %497

483:                                              ; preds = %477
  %484 = landingpad { ptr, i32 }
          cleanup
  %485 = extractvalue { ptr, i32 } %484, 0
  store ptr %485, ptr %21, align 8
  %486 = extractvalue { ptr, i32 } %484, 1
  store i32 %486, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  br label %525

487:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %488 = load ptr, ptr %14, align 8, !tbaa !5
  %489 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %488, i32 0, i32 1
  %490 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding13as_ExternTypeEv(ptr noundef nonnull align 8 dereferenceable(16) %489)
          to label %491 unwind label %493

491:                                              ; preds = %487
  store ptr %490, ptr %56, align 8, !tbaa !5
  %492 = load ptr, ptr %56, align 8, !tbaa !5
  store i8 0, ptr %31, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  br label %497

493:                                              ; preds = %487
  %494 = landingpad { ptr, i32 }
          cleanup
  %495 = extractvalue { ptr, i32 } %494, 0
  store ptr %495, ptr %21, align 8
  %496 = extractvalue { ptr, i32 } %494, 1
  store i32 %496, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  br label %525

497:                                              ; preds = %491, %481, %474, %418, %290, %242
  %498 = getelementptr inbounds %class.StaticTraitResolve, ptr %95, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %499 = load ptr, ptr %7, 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) %499)
          to label %500 unwind label %510

500:                                              ; preds = %497
  invoke void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind writable sret(%"struct.std::pair.588") align 8 %57, ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %501 unwind label %514

501:                                              ; preds = %500
  %502 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %498, ptr noundef nonnull align 8 dereferenceable(9) %57)
          to label %503 unwind label %518

503:                                              ; preds = %501
  %504 = getelementptr inbounds { ptr, i8 }, ptr %59, i32 0, i32 0
  %505 = extractvalue { ptr, i8 } %502, 0
  store ptr %505, ptr %504, align 8
  %506 = getelementptr inbounds { ptr, i8 }, ptr %59, i32 0, i32 1
  %507 = extractvalue { ptr, i8 } %502, 1
  store i8 %507, ptr %506, align 8
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %57) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #8
  %508 = load i8, ptr %31, align 1, !tbaa !9, !range !11, !noundef !12
  %509 = trunc i8 %508 to i1
  store i1 %509, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %524

510:                                              ; preds = %497
  %511 = landingpad { ptr, i32 }
          cleanup
  %512 = extractvalue { ptr, i32 } %511, 0
  store ptr %512, ptr %21, align 8
  %513 = extractvalue { ptr, i32 } %511, 1
  store i32 %513, ptr %22, align 4
  br label %523

514:                                              ; preds = %500
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %21, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %22, align 4
  br label %522

518:                                              ; preds = %501
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %21, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %22, align 4
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %57) #8
  br label %522

522:                                              ; preds = %518, %514
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #8
  br label %523

523:                                              ; preds = %522, %510
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #8
  br label %525

524:                                              ; preds = %503, %296
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %29) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %529

525:                                              ; preds = %523, %493, %483, %476, %419, %298, %291, %255
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %29) #8
  br label %526

526:                                              ; preds = %525, %251
  call void @llvm.lifetime.end.p0(i64 128, ptr %29) #8
  br label %527

527:                                              ; preds = %526, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #8
  br label %528

528:                                              ; preds = %527, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %530

529:                                              ; preds = %524, %201
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #8
  br label %531

530:                                              ; preds = %528, %223, %206
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #8
  br label %911

531:                                              ; preds = %529, %180
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %533

532:                                              ; No predecessors!
  store i8 0, ptr %13, align 1, !tbaa !9
  br label %146, !llvm.loop !42

533:                                              ; preds = %531, %170, %155, %150
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  %534 = load i32, ptr %9, align 4
  switch i32 %534, label %537 [
    i32 18, label %535
  ]

535:                                              ; preds = %533
  br label %536

536:                                              ; preds = %535
  store i8 0, ptr %13, align 1, !tbaa !9
  br label %139, !llvm.loop !43

537:                                              ; preds = %533, %142
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #8
  %538 = load i32, ptr %9, align 4
  switch i32 %538, label %909 [
    i32 15, label %539
  ]

539:                                              ; preds = %537
  br label %907

540:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #8
  store i8 1, ptr %60, align 1, !tbaa !9
  br label %541

541:                                              ; preds = %558, %540
  %542 = load i8, ptr %60, align 1, !tbaa !9, !range !11, !noundef !12
  %543 = trunc i8 %542 to i1
  br i1 %543, label %545, label %544

544:                                              ; preds = %541
  store i32 31, ptr %9, align 4
  br label %559

545:                                              ; preds = %541
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  %546 = load ptr, ptr %10, align 8, !tbaa !5
  %547 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %546)
  store ptr %547, ptr %61, align 8, !tbaa !5
  br label %548

548:                                              ; preds = %554, %545
  %549 = load ptr, ptr %61, align 8, !tbaa !5
  %550 = load i8, ptr %60, align 1, !tbaa !9, !range !11, !noundef !12
  %551 = trunc i8 %550 to i1
  br i1 %551, label %553, label %552

552:                                              ; preds = %548
  store i32 34, ptr %9, align 4
  br label %555

553:                                              ; preds = %548
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %555

554:                                              ; No predecessors!
  store i8 0, ptr %60, align 1, !tbaa !9
  br label %548, !llvm.loop !44

555:                                              ; preds = %553, %552
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  %556 = load i32, ptr %9, align 4
  switch i32 %556, label %559 [
    i32 34, label %557
  ]

557:                                              ; preds = %555
  br label %558

558:                                              ; preds = %557
  store i8 0, ptr %60, align 1, !tbaa !9
  br label %541, !llvm.loop !45

559:                                              ; preds = %555, %544
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #8
  %560 = load i32, ptr %9, align 4
  switch i32 %560, label %909 [
    i32 31, label %561
  ]

561:                                              ; preds = %559
  br label %907

562:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #8
  store i8 1, ptr %62, align 1, !tbaa !9
  br label %563

563:                                              ; preds = %580, %562
  %564 = load i8, ptr %62, align 1, !tbaa !9, !range !11, !noundef !12
  %565 = trunc i8 %564 to i1
  br i1 %565, label %567, label %566

566:                                              ; preds = %563
  store i32 37, ptr %9, align 4
  br label %581

567:                                              ; preds = %563
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #8
  %568 = load ptr, ptr %10, align 8, !tbaa !5
  %569 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %568)
  store ptr %569, ptr %63, align 8, !tbaa !5
  br label %570

570:                                              ; preds = %576, %567
  %571 = load ptr, ptr %63, align 8, !tbaa !5
  %572 = load i8, ptr %62, align 1, !tbaa !9, !range !11, !noundef !12
  %573 = trunc i8 %572 to i1
  br i1 %573, label %575, label %574

574:                                              ; preds = %570
  store i32 40, ptr %9, align 4
  br label %577

575:                                              ; preds = %570
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %577

576:                                              ; No predecessors!
  store i8 0, ptr %62, align 1, !tbaa !9
  br label %570, !llvm.loop !46

577:                                              ; preds = %575, %574
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  %578 = load i32, ptr %9, align 4
  switch i32 %578, label %581 [
    i32 40, label %579
  ]

579:                                              ; preds = %577
  br label %580

580:                                              ; preds = %579
  store i8 0, ptr %62, align 1, !tbaa !9
  br label %563, !llvm.loop !47

581:                                              ; preds = %577, %566
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #8
  %582 = load i32, ptr %9, align 4
  switch i32 %582, label %909 [
    i32 37, label %583
  ]

583:                                              ; preds = %581
  br label %907

584:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #8
  store i8 1, ptr %64, align 1, !tbaa !9
  br label %585

585:                                              ; preds = %602, %584
  %586 = load i8, ptr %64, align 1, !tbaa !9, !range !11, !noundef !12
  %587 = trunc i8 %586 to i1
  br i1 %587, label %589, label %588

588:                                              ; preds = %585
  store i32 43, ptr %9, align 4
  br label %603

589:                                              ; preds = %585
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #8
  %590 = load ptr, ptr %10, align 8, !tbaa !5
  %591 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %590)
  store ptr %591, ptr %65, align 8, !tbaa !5
  br label %592

592:                                              ; preds = %598, %589
  %593 = load ptr, ptr %65, align 8, !tbaa !5
  %594 = load i8, ptr %64, align 1, !tbaa !9, !range !11, !noundef !12
  %595 = trunc i8 %594 to i1
  br i1 %595, label %597, label %596

596:                                              ; preds = %592
  store i32 46, ptr %9, align 4
  br label %599

597:                                              ; preds = %592
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %599

598:                                              ; No predecessors!
  store i8 0, ptr %64, align 1, !tbaa !9
  br label %592, !llvm.loop !48

599:                                              ; preds = %597, %596
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  %600 = load i32, ptr %9, align 4
  switch i32 %600, label %603 [
    i32 46, label %601
  ]

601:                                              ; preds = %599
  br label %602

602:                                              ; preds = %601
  store i8 0, ptr %64, align 1, !tbaa !9
  br label %585, !llvm.loop !49

603:                                              ; preds = %599, %588
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #8
  %604 = load i32, ptr %9, align 4
  switch i32 %604, label %909 [
    i32 43, label %605
  ]

605:                                              ; preds = %603
  br label %907

606:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #8
  store i8 1, ptr %66, align 1, !tbaa !9
  br label %607

607:                                              ; preds = %640, %606
  %608 = load i8, ptr %66, align 1, !tbaa !9, !range !11, !noundef !12
  %609 = trunc i8 %608 to i1
  br i1 %609, label %611, label %610

610:                                              ; preds = %607
  store i32 49, ptr %9, align 4
  br label %641

611:                                              ; preds = %607
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #8
  %612 = load ptr, ptr %10, align 8, !tbaa !5
  %613 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %612)
  store ptr %613, ptr %67, align 8, !tbaa !5
  br label %614

614:                                              ; preds = %635, %611
  %615 = load ptr, ptr %67, align 8, !tbaa !5
  %616 = load i8, ptr %66, align 1, !tbaa !9, !range !11, !noundef !12
  %617 = trunc i8 %616 to i1
  br i1 %617, label %619, label %618

618:                                              ; preds = %614
  store i32 52, ptr %9, align 4
  br label %636

619:                                              ; preds = %614
  br label %620

620:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  %621 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef nonnull align 8 dereferenceable(8) %621)
  call void @llvm.lifetime.start.p0(i64 1, ptr %70) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 1 dereferenceable(1) %70) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef %69)
          to label %622 unwind label %625

622:                                              ; preds = %620
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  %623 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %623, ptr noundef @.str)
          to label %624 unwind label %629

624:                                              ; preds = %622
  call void @__cxa_throw(ptr %623, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
  unreachable

625:                                              ; preds = %620
  %626 = landingpad { ptr, i32 }
          cleanup
  %627 = extractvalue { ptr, i32 } %626, 0
  store ptr %627, ptr %21, align 8
  %628 = extractvalue { ptr, i32 } %626, 1
  store i32 %628, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  br label %638

629:                                              ; preds = %622
  %630 = landingpad { ptr, i32 }
          cleanup
  %631 = extractvalue { ptr, i32 } %630, 0
  store ptr %631, ptr %21, align 8
  %632 = extractvalue { ptr, i32 } %630, 1
  store i32 %632, ptr %22, align 4
  call void @__cxa_free_exception(ptr %623) #8
  br label %638

633:                                              ; No predecessors!
  br label %634

634:                                              ; preds = %633
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %636

635:                                              ; No predecessors!
  store i8 0, ptr %66, align 1, !tbaa !9
  br label %614, !llvm.loop !50

636:                                              ; preds = %634, %618
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  %637 = load i32, ptr %9, align 4
  switch i32 %637, label %641 [
    i32 52, label %639
  ]

638:                                              ; preds = %629, %625
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #8
  br label %911

639:                                              ; preds = %636
  br label %640

640:                                              ; preds = %639
  store i8 0, ptr %66, align 1, !tbaa !9
  br label %607, !llvm.loop !51

641:                                              ; preds = %636, %610
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #8
  %642 = load i32, ptr %9, align 4
  switch i32 %642, label %909 [
    i32 49, label %643
  ]

643:                                              ; preds = %641
  br label %907

644:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %71) #8
  store i8 1, ptr %71, align 1, !tbaa !9
  br label %645

645:                                              ; preds = %672, %644
  %646 = load i8, ptr %71, align 1, !tbaa !9, !range !11, !noundef !12
  %647 = trunc i8 %646 to i1
  br i1 %647, label %649, label %648

648:                                              ; preds = %645
  store i32 57, ptr %9, align 4
  br label %673

649:                                              ; preds = %645
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %650 = load ptr, ptr %10, align 8, !tbaa !5
  %651 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %650)
  store ptr %651, ptr %72, align 8, !tbaa !5
  br label %652

652:                                              ; preds = %668, %649
  %653 = load ptr, ptr %72, align 8, !tbaa !5
  %654 = load i8, ptr %71, align 1, !tbaa !9, !range !11, !noundef !12
  %655 = trunc i8 %654 to i1
  br i1 %655, label %657, label %656

656:                                              ; preds = %652
  store i32 60, ptr %9, align 4
  br label %669

657:                                              ; preds = %652
  %658 = load ptr, ptr %72, align 8, !tbaa !5
  %659 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %658, i32 0, i32 1
  %660 = load i32, ptr %659, align 4, !tbaa !52
  %661 = icmp ne i32 %660, 2
  br i1 %661, label %662, label %663

662:                                              ; preds = %657
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %669

663:                                              ; preds = %657
  %664 = load ptr, ptr %6, align 8, !tbaa !5
  %665 = load ptr, ptr %72, align 8, !tbaa !5
  %666 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %665, i32 0, i32 2
  %667 = call noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %664, ptr noundef nonnull align 8 dereferenceable(8) %666)
  store i1 %667, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %669

668:                                              ; No predecessors!
  store i8 0, ptr %71, align 1, !tbaa !9
  br label %652, !llvm.loop !57

669:                                              ; preds = %663, %662, %656
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  %670 = load i32, ptr %9, align 4
  switch i32 %670, label %673 [
    i32 60, label %671
  ]

671:                                              ; preds = %669
  br label %672

672:                                              ; preds = %671
  store i8 0, ptr %71, align 1, !tbaa !9
  br label %645, !llvm.loop !58

673:                                              ; preds = %669, %648
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #8
  %674 = load i32, ptr %9, align 4
  switch i32 %674, label %909 [
    i32 57, label %675
  ]

675:                                              ; preds = %673
  br label %907

676:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %73) #8
  store i8 1, ptr %73, align 1, !tbaa !9
  br label %677

677:                                              ; preds = %694, %676
  %678 = load i8, ptr %73, align 1, !tbaa !9, !range !11, !noundef !12
  %679 = trunc i8 %678 to i1
  br i1 %679, label %681, label %680

680:                                              ; preds = %677
  store i32 63, ptr %9, align 4
  br label %695

681:                                              ; preds = %677
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %682 = load ptr, ptr %10, align 8, !tbaa !5
  %683 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %682)
  store ptr %683, ptr %74, align 8, !tbaa !5
  br label %684

684:                                              ; preds = %690, %681
  %685 = load ptr, ptr %74, align 8, !tbaa !5
  %686 = load i8, ptr %73, align 1, !tbaa !9, !range !11, !noundef !12
  %687 = trunc i8 %686 to i1
  br i1 %687, label %689, label %688

688:                                              ; preds = %684
  store i32 66, ptr %9, align 4
  br label %691

689:                                              ; preds = %684
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %691

690:                                              ; No predecessors!
  store i8 0, ptr %73, align 1, !tbaa !9
  br label %684, !llvm.loop !59

691:                                              ; preds = %689, %688
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  %692 = load i32, ptr %9, align 4
  switch i32 %692, label %695 [
    i32 66, label %693
  ]

693:                                              ; preds = %691
  br label %694

694:                                              ; preds = %693
  store i8 0, ptr %73, align 1, !tbaa !9
  br label %677, !llvm.loop !60

695:                                              ; preds = %691, %680
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #8
  %696 = load i32, ptr %9, align 4
  switch i32 %696, label %909 [
    i32 63, label %697
  ]

697:                                              ; preds = %695
  br label %907

698:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %75) #8
  store i8 1, ptr %75, align 1, !tbaa !9
  br label %699

699:                                              ; preds = %716, %698
  %700 = load i8, ptr %75, align 1, !tbaa !9, !range !11, !noundef !12
  %701 = trunc i8 %700 to i1
  br i1 %701, label %703, label %702

702:                                              ; preds = %699
  store i32 69, ptr %9, align 4
  br label %717

703:                                              ; preds = %699
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #8
  %704 = load ptr, ptr %10, align 8, !tbaa !5
  %705 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %704)
  store ptr %705, ptr %76, align 8, !tbaa !5
  br label %706

706:                                              ; preds = %712, %703
  %707 = load ptr, ptr %76, align 8, !tbaa !5
  %708 = load i8, ptr %75, align 1, !tbaa !9, !range !11, !noundef !12
  %709 = trunc i8 %708 to i1
  br i1 %709, label %711, label %710

710:                                              ; preds = %706
  store i32 72, ptr %9, align 4
  br label %713

711:                                              ; preds = %706
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %713

712:                                              ; No predecessors!
  store i8 0, ptr %75, align 1, !tbaa !9
  br label %706, !llvm.loop !61

713:                                              ; preds = %711, %710
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  %714 = load i32, ptr %9, align 4
  switch i32 %714, label %717 [
    i32 72, label %715
  ]

715:                                              ; preds = %713
  br label %716

716:                                              ; preds = %715
  store i8 0, ptr %75, align 1, !tbaa !9
  br label %699, !llvm.loop !62

717:                                              ; preds = %713, %702
  call void @llvm.lifetime.end.p0(i64 1, ptr %75) #8
  %718 = load i32, ptr %9, align 4
  switch i32 %718, label %909 [
    i32 69, label %719
  ]

719:                                              ; preds = %717
  br label %907

720:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %77) #8
  store i8 1, ptr %77, align 1, !tbaa !9
  br label %721

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

724:                                              ; preds = %721
  store i32 75, ptr %9, align 4
  br label %739

725:                                              ; preds = %721
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #8
  %726 = load ptr, ptr %10, align 8, !tbaa !5
  %727 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %726)
  store ptr %727, ptr %78, align 8, !tbaa !5
  br label %728

728:                                              ; preds = %734, %725
  %729 = load ptr, ptr %78, align 8, !tbaa !5
  %730 = load i8, ptr %77, align 1, !tbaa !9, !range !11, !noundef !12
  %731 = trunc i8 %730 to i1
  br i1 %731, label %733, label %732

732:                                              ; preds = %728
  store i32 78, ptr %9, align 4
  br label %735

733:                                              ; preds = %728
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %735

734:                                              ; No predecessors!
  store i8 0, ptr %77, align 1, !tbaa !9
  br label %728, !llvm.loop !63

735:                                              ; preds = %733, %732
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  %736 = load i32, ptr %9, align 4
  switch i32 %736, label %739 [
    i32 78, label %737
  ]

737:                                              ; preds = %735
  br label %738

738:                                              ; preds = %737
  store i8 0, ptr %77, align 1, !tbaa !9
  br label %721, !llvm.loop !64

739:                                              ; preds = %735, %724
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #8
  %740 = load i32, ptr %9, align 4
  switch i32 %740, label %909 [
    i32 75, label %741
  ]

741:                                              ; preds = %739
  br label %907

742:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %79) #8
  store i8 1, ptr %79, align 1, !tbaa !9
  br label %743

743:                                              ; preds = %760, %742
  %744 = load i8, ptr %79, align 1, !tbaa !9, !range !11, !noundef !12
  %745 = trunc i8 %744 to i1
  br i1 %745, label %747, label %746

746:                                              ; preds = %743
  store i32 81, ptr %9, align 4
  br label %761

747:                                              ; preds = %743
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #8
  %748 = load ptr, ptr %10, align 8, !tbaa !5
  %749 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %748)
  store ptr %749, ptr %80, align 8, !tbaa !5
  br label %750

750:                                              ; preds = %756, %747
  %751 = load ptr, ptr %80, align 8, !tbaa !5
  %752 = load i8, ptr %79, align 1, !tbaa !9, !range !11, !noundef !12
  %753 = trunc i8 %752 to i1
  br i1 %753, label %755, label %754

754:                                              ; preds = %750
  store i32 84, ptr %9, align 4
  br label %757

755:                                              ; preds = %750
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %757

756:                                              ; No predecessors!
  store i8 0, ptr %79, align 1, !tbaa !9
  br label %750, !llvm.loop !65

757:                                              ; preds = %755, %754
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  %758 = load i32, ptr %9, align 4
  switch i32 %758, label %761 [
    i32 84, label %759
  ]

759:                                              ; preds = %757
  br label %760

760:                                              ; preds = %759
  store i8 0, ptr %79, align 1, !tbaa !9
  br label %743, !llvm.loop !66

761:                                              ; preds = %757, %746
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #8
  %762 = load i32, ptr %9, align 4
  switch i32 %762, label %909 [
    i32 81, label %763
  ]

763:                                              ; preds = %761
  br label %907

764:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %81) #8
  store i8 1, ptr %81, align 1, !tbaa !9
  br label %765

765:                                              ; preds = %786, %764
  %766 = load i8, ptr %81, align 1, !tbaa !9, !range !11, !noundef !12
  %767 = trunc i8 %766 to i1
  br i1 %767, label %769, label %768

768:                                              ; preds = %765
  store i32 87, ptr %9, align 4
  br label %787

769:                                              ; preds = %765
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #8
  %770 = load ptr, ptr %10, align 8, !tbaa !5
  %771 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %770)
  store ptr %771, ptr %82, align 8, !tbaa !5
  br label %772

772:                                              ; preds = %782, %769
  %773 = load ptr, ptr %82, align 8, !tbaa !5
  %774 = load i8, ptr %81, align 1, !tbaa !9, !range !11, !noundef !12
  %775 = trunc i8 %774 to i1
  br i1 %775, label %777, label %776

776:                                              ; preds = %772
  store i32 90, ptr %9, align 4
  br label %783

777:                                              ; preds = %772
  %778 = load ptr, ptr %6, align 8, !tbaa !5
  %779 = load ptr, ptr %82, align 8, !tbaa !5
  %780 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %779, i32 0, i32 0
  %781 = call noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %778, ptr noundef nonnull align 8 dereferenceable(8) %780)
  store i1 %781, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %783

782:                                              ; No predecessors!
  store i8 0, ptr %81, align 1, !tbaa !9
  br label %772, !llvm.loop !67

783:                                              ; preds = %777, %776
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #8
  %784 = load i32, ptr %9, align 4
  switch i32 %784, label %787 [
    i32 90, label %785
  ]

785:                                              ; preds = %783
  br label %786

786:                                              ; preds = %785
  store i8 0, ptr %81, align 1, !tbaa !9
  br label %765, !llvm.loop !68

787:                                              ; preds = %783, %768
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #8
  %788 = load i32, ptr %9, align 4
  switch i32 %788, label %909 [
    i32 87, label %789
  ]

789:                                              ; preds = %787
  br label %907

790:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %83) #8
  store i8 1, ptr %83, align 1, !tbaa !9
  br label %791

791:                                              ; preds = %812, %790
  %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 = %791
  store i32 93, ptr %9, align 4
  br label %813

795:                                              ; preds = %791
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #8
  %796 = load ptr, ptr %10, align 8, !tbaa !5
  %797 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %796)
  store ptr %797, ptr %84, align 8, !tbaa !5
  br label %798

798:                                              ; preds = %808, %795
  %799 = load ptr, ptr %84, align 8, !tbaa !5
  %800 = load i8, ptr %83, align 1, !tbaa !9, !range !11, !noundef !12
  %801 = trunc i8 %800 to i1
  br i1 %801, label %803, label %802

802:                                              ; preds = %798
  store i32 96, ptr %9, align 4
  br label %809

803:                                              ; preds = %798
  %804 = load ptr, ptr %6, align 8, !tbaa !5
  %805 = load ptr, ptr %84, align 8, !tbaa !5
  %806 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %805, i32 0, i32 0
  %807 = call noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %804, ptr noundef nonnull align 8 dereferenceable(8) %806)
  store i1 %807, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %809

808:                                              ; No predecessors!
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %798, !llvm.loop !69

809:                                              ; preds = %803, %802
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #8
  %810 = load i32, ptr %9, align 4
  switch i32 %810, label %813 [
    i32 96, label %811
  ]

811:                                              ; preds = %809
  br label %812

812:                                              ; preds = %811
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %791, !llvm.loop !70

813:                                              ; preds = %809, %794
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #8
  %814 = load i32, ptr %9, align 4
  switch i32 %814, label %909 [
    i32 93, label %815
  ]

815:                                              ; preds = %813
  br label %907

816:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %85) #8
  store i8 1, ptr %85, align 1, !tbaa !9
  br label %817

817:                                              ; preds = %834, %816
  %818 = load i8, ptr %85, align 1, !tbaa !9, !range !11, !noundef !12
  %819 = trunc i8 %818 to i1
  br i1 %819, label %821, label %820

820:                                              ; preds = %817
  store i32 99, ptr %9, align 4
  br label %835

821:                                              ; preds = %817
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #8
  %822 = load ptr, ptr %10, align 8, !tbaa !5
  %823 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %822)
  store ptr %823, ptr %86, align 8, !tbaa !5
  br label %824

824:                                              ; preds = %830, %821
  %825 = load ptr, ptr %86, align 8, !tbaa !5
  %826 = load i8, ptr %85, align 1, !tbaa !9, !range !11, !noundef !12
  %827 = trunc i8 %826 to i1
  br i1 %827, label %829, label %828

828:                                              ; preds = %824
  store i32 102, ptr %9, align 4
  br label %831

829:                                              ; preds = %824
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %831

830:                                              ; No predecessors!
  store i8 0, ptr %85, align 1, !tbaa !9
  br label %824, !llvm.loop !71

831:                                              ; preds = %829, %828
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  %832 = load i32, ptr %9, align 4
  switch i32 %832, label %835 [
    i32 102, label %833
  ]

833:                                              ; preds = %831
  br label %834

834:                                              ; preds = %833
  store i8 0, ptr %85, align 1, !tbaa !9
  br label %817, !llvm.loop !72

835:                                              ; preds = %831, %820
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #8
  %836 = load i32, ptr %9, align 4
  switch i32 %836, label %909 [
    i32 99, label %837
  ]

837:                                              ; preds = %835
  br label %907

838:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %87) #8
  store i8 1, ptr %87, align 1, !tbaa !9
  br label %839

839:                                              ; preds = %856, %838
  %840 = load i8, ptr %87, align 1, !tbaa !9, !range !11, !noundef !12
  %841 = trunc i8 %840 to i1
  br i1 %841, label %843, label %842

842:                                              ; preds = %839
  store i32 105, ptr %9, align 4
  br label %857

843:                                              ; preds = %839
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %844 = load ptr, ptr %10, align 8, !tbaa !5
  %845 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %844)
  store ptr %845, ptr %88, align 8, !tbaa !5
  br label %846

846:                                              ; preds = %852, %843
  %847 = load ptr, ptr %88, align 8, !tbaa !5
  %848 = load i8, ptr %87, align 1, !tbaa !9, !range !11, !noundef !12
  %849 = trunc i8 %848 to i1
  br i1 %849, label %851, label %850

850:                                              ; preds = %846
  store i32 108, ptr %9, align 4
  br label %853

851:                                              ; preds = %846
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %853

852:                                              ; No predecessors!
  store i8 0, ptr %87, align 1, !tbaa !9
  br label %846, !llvm.loop !73

853:                                              ; preds = %851, %850
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  %854 = load i32, ptr %9, align 4
  switch i32 %854, label %857 [
    i32 108, label %855
  ]

855:                                              ; preds = %853
  br label %856

856:                                              ; preds = %855
  store i8 0, ptr %87, align 1, !tbaa !9
  br label %839, !llvm.loop !74

857:                                              ; preds = %853, %842
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #8
  %858 = load i32, ptr %9, align 4
  switch i32 %858, label %909 [
    i32 105, label %859
  ]

859:                                              ; preds = %857
  br label %907

860:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %89) #8
  store i8 1, ptr %89, align 1, !tbaa !9
  br label %861

861:                                              ; preds = %903, %860
  %862 = load i8, ptr %89, align 1, !tbaa !9, !range !11, !noundef !12
  %863 = trunc i8 %862 to i1
  br i1 %863, label %865, label %864

864:                                              ; preds = %861
  store i32 111, ptr %9, align 4
  br label %904

865:                                              ; preds = %861
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #8
  %866 = load ptr, ptr %10, align 8, !tbaa !5
  %867 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %866)
  store ptr %867, ptr %90, align 8, !tbaa !5
  br label %868

868:                                              ; preds = %899, %865
  %869 = load ptr, ptr %90, align 8, !tbaa !5
  %870 = load i8, ptr %89, align 1, !tbaa !9, !range !11, !noundef !12
  %871 = trunc i8 %870 to i1
  br i1 %871, label %873, label %872

872:                                              ; preds = %868
  store i32 114, ptr %9, align 4
  br label %900

873:                                              ; preds = %868
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #8
  %874 = load ptr, ptr %90, align 8, !tbaa !5
  store ptr %874, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #8
  %875 = load ptr, ptr %91, align 8, !tbaa !5
  %876 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %875) #8
  %877 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.518", ptr %92, i32 0, i32 0
  store ptr %876, ptr %877, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  %878 = load ptr, ptr %91, align 8, !tbaa !5
  %879 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %878) #8
  %880 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.518", ptr %93, i32 0, i32 0
  store ptr %879, ptr %880, align 8
  br label %881

881:                                              ; preds = %894, %873
  %882 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull align 8 dereferenceable(8) %93) #8
  br i1 %882, label %884, label %883

883:                                              ; preds = %881
  store i32 117, ptr %9, align 4
  br label %896

884:                                              ; preds = %881
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  %885 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %92) #8
  store ptr %885, ptr %94, align 8, !tbaa !5
  %886 = load ptr, ptr %6, align 8, !tbaa !5
  %887 = load ptr, ptr %94, align 8, !tbaa !5
  %888 = call noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %95, ptr noundef nonnull align 8 dereferenceable(8) %886, ptr noundef nonnull align 8 dereferenceable(8) %887)
  br i1 %888, label %889, label %890

889:                                              ; preds = %884
  store i1 true, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %891

890:                                              ; preds = %884
  store i32 0, ptr %9, align 4
  br label %891

891:                                              ; preds = %890, %889
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  %892 = load i32, ptr %9, align 4
  switch i32 %892, label %896 [
    i32 0, label %893
  ]

893:                                              ; preds = %891
  br label %894

894:                                              ; preds = %893
  %895 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %92) #8
  br label %881

896:                                              ; preds = %891, %883
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #8
  %897 = load i32, ptr %9, align 4
  switch i32 %897, label %900 [
    i32 117, label %898
  ]

898:                                              ; preds = %896
  store i1 false, ptr %4, align 1
  store i32 1, ptr %9, align 4
  br label %900

899:                                              ; No predecessors!
  store i8 0, ptr %89, align 1, !tbaa !9
  br label %868, !llvm.loop !75

900:                                              ; preds = %898, %896, %872
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  %901 = load i32, ptr %9, align 4
  switch i32 %901, label %904 [
    i32 114, label %902
  ]

902:                                              ; preds = %900
  br label %903

903:                                              ; preds = %902
  store i8 0, ptr %89, align 1, !tbaa !9
  br label %861, !llvm.loop !76

904:                                              ; preds = %900, %864
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #8
  %905 = load i32, ptr %9, align 4
  switch i32 %905, label %909 [
    i32 111, label %906
  ]

906:                                              ; preds = %904
  br label %907

907:                                              ; preds = %906, %859, %837, %815, %789, %763, %741, %719, %697, %675, %643, %605, %583, %561, %539, %137, %112
  br label %908

908:                                              ; preds = %907
  store i8 0, ptr %8, align 1, !tbaa !9
  br label %108, !llvm.loop !77

909:                                              ; preds = %904, %857, %835, %813, %787, %761, %739, %717, %695, %673, %641, %603, %581, %559, %537, %135, %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  %910 = load i32, ptr %9, align 4
  switch i32 %910, label %914 [
    i32 5, label %912
  ]

911:                                              ; preds = %638, %530
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  br label %919

912:                                              ; preds = %909
  br label %913

913:                                              ; preds = %912
  store i8 0, ptr %8, align 1, !tbaa !9
  br label %101, !llvm.loop !78

914:                                              ; preds = %909, %104
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  %915 = load i32, ptr %9, align 4
  switch i32 %915, label %924 [
    i32 2, label %916
    i32 1, label %917
  ]

916:                                              ; preds = %914
  call void @__assert_fail(ptr noundef @.str.89, ptr noundef @.str.5, i32 noundef 3061, ptr noundef @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE) #9
  unreachable

917:                                              ; preds = %914, %99
  %918 = load i1, ptr %4, align 1
  ret i1 %918

919:                                              ; preds = %911
  %920 = load ptr, ptr %21, align 8
  %921 = load i32, ptr %22, align 4
  %922 = insertvalue { ptr, i32 } poison, ptr %920, 0
  %923 = insertvalue { ptr, i32 } %922, i32 %921, 1
  resume { ptr, i32 } %923

924:                                              ; preds = %914, %271
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFb7ImplRefbEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3HIR7TypeRefEbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS3_INS4_IT0_E4typeEE6__typeEEOS5_OSA_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.588") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) #0

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEENK3$_2clIS4_EES6_RKT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #8 = { nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { 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 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{!17, !17, i64 0}
!17 = !{!"_ZTS13TargetVersion", !7, i64 0}
!18 = !{!19, !6, i64 0}
!19 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !20, i64 24, !29, i64 72, !35, i64 104, !35, i64 112, !35, i64 120, !35, i64 128, !35, i64 136, !35, i64 144, !35, i64 152, !35, i64 160, !35, i64 168, !35, i64 176, !35, i64 184, !35, i64 192, !35, i64 200, !35, i64 208}
!20 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !21, i64 0}
!21 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !22, i64 0}
!22 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !23, i64 0, !25, i64 8}
!23 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !24, i64 0}
!24 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!25 = !{!"_ZTSSt15_Rb_tree_header", !26, i64 0, !28, i64 32}
!26 = !{!"_ZTSSt18_Rb_tree_node_base", !27, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!27 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!28 = !{!"long", !7, i64 0}
!29 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !30, i64 0, !34, i64 24}
!30 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !31, i64 0}
!31 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!34 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!35 = !{!"_ZTSN3HIR10SimplePathE", !36, i64 0}
!36 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!37 = !{!38, !10, i64 8}
!38 = !{!"_ZTSSt4pairIKN3HIR7TypeRefEbE", !39, i64 0, !10, i64 8}
!39 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!40 = !{!41, !6, i64 0}
!41 = !{!"_ZTSZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_2", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14}
!45 = distinct !{!45, !14}
!46 = distinct !{!46, !14}
!47 = distinct !{!47, !14}
!48 = distinct !{!48, !14}
!49 = distinct !{!49, !14}
!50 = distinct !{!50, !14}
!51 = distinct !{!51, !14}
!52 = !{!53, !56, i64 4}
!53 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !54, i64 0, !56, i64 4, !39, i64 8}
!54 = !{!"_ZTSN3HIR11LifetimeRefE", !55, i64 0}
!55 = !{!"int", !7, i64 0}
!56 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!57 = distinct !{!57, !14}
!58 = distinct !{!58, !14}
!59 = distinct !{!59, !14}
!60 = distinct !{!60, !14}
!61 = distinct !{!61, !14}
!62 = distinct !{!62, !14}
!63 = distinct !{!63, !14}
!64 = distinct !{!64, !14}
!65 = distinct !{!65, !14}
!66 = distinct !{!66, !14}
!67 = distinct !{!67, !14}
!68 = distinct !{!68, !14}
!69 = distinct !{!69, !14}
!70 = distinct !{!70, !14}
!71 = distinct !{!71, !14}
!72 = distinct !{!72, !14}
!73 = distinct !{!73, !14}
!74 = distinct !{!74, !14}
!75 = distinct !{!75, !14}
!76 = distinct !{!76, !14}
!77 = distinct !{!77, !14}
!78 = distinct !{!78, !14}


; 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::TypeRef" = type { ptr }
%"struct.std::pair.588" = type <{ %"class.HIR::TypeRef", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator.579" = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.17, %class.ThinVector.18, %class.ThinVector.19 }
%class.ThinVector.17 = type { ptr }
%class.ThinVector.18 = type { ptr }
%class.ThinVector.19 = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.625 = type { i8 }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.401" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.401" = type { %"struct.std::_Vector_base.402" }
%"struct.std::_Vector_base.402" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.627 = type { ptr, ptr, ptr, ptr }
%struct.Span = type { ptr }
%"class.std::function.0" = type { %"class.std::_Function_base", ptr }
%class.anon.628 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.507" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.511" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.514" = type { ptr }
%class.anon.630 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.518" = type { ptr }

@gTargetVersion = external local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.4 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [80 x i8], align 1
@__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE = external hidden unnamed_addr constant [90 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [44 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve9find_implERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEEb(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, i1 noundef zeroext) local_unnamed_addr #0 align 2

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

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR10SimplePatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve12type_is_copyERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 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 #3 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 #4 align 2

declare void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2

declare void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #2

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR15TypePathBinding9is_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

declare void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 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 #4 align 2

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

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

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

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

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

; 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 #4 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 #4 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR5Crate22get_lang_item_path_optEPKc(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef) local_unnamed_addr #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 #4 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 #4 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 #4 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 #4 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 #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #4 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 #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding9as_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding10as_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEdeEv(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(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEppEv(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(24) ptr @_ZNK3HIR6Struct4Data8as_NamedEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEdeEv(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(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEppEv(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(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEdeEv(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(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEppEv(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(8) ptr @_ZNK3HIR15TypePathBinding8as_UnionEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 #3

; 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 #4 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 #4 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 #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEES7_(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 ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(9)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.588") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9)) unnamed_addr #3 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 #4 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 #4 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 #4 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 #4 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 #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
.split428:
  %3 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %4 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %5 = alloca %"struct.HIR::PathParams", align 8
  %6 = alloca %"class.std::function", align 8
  %7 = alloca %class.anon.625, align 1
  %8 = alloca %"struct.std::pair.588", align 8
  %9 = alloca %"class.HIR::TypeRef", align 8
  %10 = alloca i8, align 1
  %11 = alloca %"class.HIR::TypeRef", align 8
  %12 = alloca %struct.MonomorphStatePtr, align 8
  %13 = alloca %class.anon.627, align 8
  %14 = alloca i8, align 1
  %15 = alloca %struct.Span, align 8
  %16 = alloca %"class.std::function.0", align 8
  %17 = alloca %class.anon.628, align 1
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.507", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator.507", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator.511", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.511", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator.514", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator.514", align 8
  %24 = alloca %"struct.std::pair.588", align 8
  %25 = alloca %"class.HIR::TypeRef", align 8
  %26 = alloca %struct.Span, align 8
  %27 = alloca %"class.std::function.0", align 8
  %28 = alloca %class.anon.630, align 1
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.518", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.518", align 8
  %31 = tail call noundef zeroext i1 @_ZNK18StaticTraitResolve12type_is_copyERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2)
  br i1 %31, label %.thread332, label %.preheader

.preheader:                                       ; preds = %.split428, %tailrecurse.backedge
  %.tr344429 = phi ptr [ %.tr344.be, %tailrecurse.backedge ], [ %2, %.split428 ]
  %32 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %.tr344429)
  %33 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  switch i32 %33, label %.thread326 [
    i32 0, label %.split
    i32 5, label %.split381
    i32 4, label %.split383
    i32 2, label %.split387
    i32 15, label %.split390
    i32 16, label %.split393
    i32 1, label %.split396
    i32 11, label %.split399
    i32 12, label %.split402
    i32 13, label %.split405
    i32 14, label %.split408
    i32 3, label %.split411
    i32 8, label %.split414
    i32 9, label %.split417
    i32 6, label %.split420
    i32 7, label %.split423
    i32 10, label %.split426
  ], !llvm.loop !5

.split:                                           ; preds = %.preheader
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, i32 noundef 2912, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE) #8
  unreachable

.split381:                                        ; preds = %.preheader
  %34 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split383:                                        ; preds = %.preheader
  %35 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  %36 = getelementptr inbounds i8, ptr %35, i64 88
  %37 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding9is_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16) %36)
  br i1 %37, label %.thread332, label %38

38:                                               ; preds = %.split383
  %39 = load i32, ptr @gTargetVersion, align 4, !tbaa !7
  %40 = icmp sgt i32 %39, 0
  br i1 %40, label %41, label %47

41:                                               ; preds = %38
  %42 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %35)
  %43 = getelementptr inbounds i8, ptr %0, i64 8
  %44 = load ptr, ptr %43, align 8, !tbaa !11
  %45 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR5Crate22get_lang_item_path_optEPKc(ptr noundef nonnull align 8 dereferenceable(944) %44, ptr noundef nonnull @.str.88)
  %46 = tail call noundef zeroext i1 @_ZNK3HIR10SimplePatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %45)
  br i1 %46, label %.thread332, label %47

47:                                               ; preds = %41, %38
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  %48 = getelementptr inbounds i8, ptr %0, i64 328
  %49 = tail call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %48, ptr noundef nonnull align 8 dereferenceable(8) %.tr344429)
  store ptr %49, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #9
  %50 = tail call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %48) #9
  store ptr %50, ptr %4, align 8
  %51 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEES7_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  br i1 %51, label %52, label %57

52:                                               ; preds = %47
  %53 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  %54 = getelementptr inbounds i8, ptr %53, i64 8
  %55 = load i8, ptr %54, align 8, !tbaa !31, !range !35, !noundef !36
  %56 = trunc nuw i8 %55 to i1
  br label %198

57:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %58 = getelementptr inbounds i8, ptr %0, i64 128
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #9
  call void @"_ZNSt8functionIFb7ImplRefbEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %7) #9
  %59 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve9find_implERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEEb(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull %5, ptr noundef nonnull align 8 dereferenceable(8) %.tr344429, ptr noundef nonnull %6, i1 noundef zeroext true)
          to label %60 unwind label %66

60:                                               ; preds = %57
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #9
  br i1 %59, label %61, label %76

61:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #9
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %9, ptr noundef nonnull align 8 dereferenceable(8) %.tr344429)
          to label %62 unwind label %68

62:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #9
  store i8 1, ptr %10, align 1, !tbaa !37
  invoke void @_ZSt9make_pairIN3HIR7TypeRefEbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS3_INS4_IT0_E4typeEE6__typeEEOS5_OSA_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.588") align 8 %8, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %63 unwind label %70

63:                                               ; preds = %62
  %64 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %48, ptr noundef nonnull align 8 dereferenceable(9) %8)
          to label %65 unwind label %72

65:                                               ; preds = %63
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %8) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #9
  br label %196

66:                                               ; preds = %57
  %67 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #9
  br label %197

68:                                               ; preds = %61
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %75

70:                                               ; preds = %62
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %74

72:                                               ; preds = %63
  %73 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %8) #9
  br label %74

74:                                               ; preds = %72, %70
  %.pn313 = phi { ptr, i32 } [ %73, %72 ], [ %71, %70 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  br label %75

75:                                               ; preds = %74, %68
  %.pn313.pn = phi { ptr, i32 } [ %.pn313, %74 ], [ %69, %68 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #9
  br label %197

76:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %77 unwind label %85

77:                                               ; preds = %76
  %78 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %35)
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %12) #9
  %79 = getelementptr inbounds i8, ptr %78, i64 8
  invoke void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %12, ptr noundef null, ptr noundef nonnull %79, ptr noundef null, ptr noundef null, ptr noundef null)
          to label %80 unwind label %87

80:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #9
  store ptr %0, ptr %13, align 8, !tbaa !38
  %81 = getelementptr inbounds i8, ptr %13, i64 8
  store ptr %1, ptr %81, align 8, !tbaa !40
  %82 = getelementptr inbounds i8, ptr %13, i64 16
  store ptr %11, ptr %82, align 8, !tbaa !40
  %83 = getelementptr inbounds i8, ptr %13, i64 24
  store ptr %12, ptr %83, align 8, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #9
  store i8 0, ptr %14, align 1, !tbaa !37
  %84 = call noundef i32 @_ZNK3HIR15TypePathBinding3tagEv(ptr noundef nonnull align 8 dereferenceable(16) %36)
  switch i32 %84, label %177 [
    i32 0, label %89
    i32 1, label %90
    i32 2, label %105
    i32 4, label %107
    i32 6, label %153
    i32 5, label %173
    i32 3, label %175
  ]

85:                                               ; preds = %76
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %195

87:                                               ; preds = %77
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %194

89:                                               ; preds = %80
  call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, i32 noundef 3003, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE) #8
  unreachable

90:                                               ; preds = %80
  %91 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding10as_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %36)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %92 unwind label %98

92:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull %16)
          to label %93 unwind label %100

93:                                               ; preds = %92
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  %94 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %94, ptr noundef nonnull @.str)
          to label %95 unwind label %103

95:                                               ; preds = %93
  invoke void @__cxa_throw(ptr nonnull %94, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %235 unwind label %96

96:                                               ; preds = %95
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %193

98:                                               ; preds = %90
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %102

100:                                              ; preds = %92
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  br label %102

102:                                              ; preds = %100, %98
  %.pn303 = phi { ptr, i32 } [ %101, %100 ], [ %99, %98 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  br label %193

103:                                              ; preds = %93
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %94) #9
  br label %193

105:                                              ; preds = %80
  %106 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding9as_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16) %36)
  br label %192

107:                                              ; preds = %80
  %108 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %36)
  %109 = load ptr, ptr %108, align 8, !tbaa !40
  %110 = getelementptr inbounds i8, ptr %109, i64 104
  %111 = call noundef i32 @_ZNK3HIR6Struct4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(32) %110)
  switch i32 %111, label %177 [
    i32 0, label %112
    i32 1, label %113
    i32 2, label %117
    i32 3, label %135
  ]

112:                                              ; preds = %107
  call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, i32 noundef 2980, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE) #8
  unreachable

113:                                              ; preds = %107
  %114 = load ptr, ptr %108, align 8, !tbaa !40
  %115 = getelementptr inbounds i8, ptr %114, i64 104
  %116 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR6Struct4Data7as_UnitEv(ptr noundef nonnull align 8 dereferenceable(32) %115)
  br label %177

117:                                              ; preds = %107
  %118 = load ptr, ptr %108, align 8, !tbaa !40
  %119 = getelementptr inbounds i8, ptr %118, i64 104
  %120 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %119)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #9
  %121 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %120) #9
  store ptr %121, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #9
  %122 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %120) #9
  store ptr %122, ptr %19, align 8
  %123 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  br i1 %123, label %.lr.ph435, label %.loopexit

.lr.ph435:                                        ; preds = %117, %.critedge
  %124 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  %125 = getelementptr inbounds i8, ptr %124, i64 16
  %126 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEENK3$_2clIS4_EES6_RKT_"(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(8) %125)
          to label %127 unwind label %131

127:                                              ; preds = %.lr.ph435
  %128 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %126)
          to label %129 unwind label %131

129:                                              ; preds = %127
  br i1 %128, label %130, label %.critedge

130:                                              ; preds = %129
  store i8 1, ptr %14, align 1, !tbaa !37
  br label %.loopexit

131:                                              ; preds = %127, %.lr.ph435
  %132 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  br label %193

.critedge:                                        ; preds = %129
  %133 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  %134 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  br i1 %134, label %.lr.ph435, label %.loopexit

.loopexit:                                        ; preds = %.critedge, %117, %130
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  br label %177

135:                                              ; preds = %107
  %136 = load ptr, ptr %108, align 8, !tbaa !40
  %137 = getelementptr inbounds i8, ptr %136, i64 104
  %138 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_NamedEv(ptr noundef nonnull align 8 dereferenceable(32) %137)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #9
  %139 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %138) #9
  store ptr %139, ptr %20, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #9
  %140 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %138) #9
  store ptr %140, ptr %21, align 8
  %141 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #9
  br i1 %141, label %.lr.ph433, label %.loopexit345

.lr.ph433:                                        ; preds = %135, %.critedge319
  %142 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  %143 = getelementptr inbounds i8, ptr %142, i64 24
  %144 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEENK3$_2clIS4_EES6_RKT_"(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(8) %143)
          to label %145 unwind label %149

145:                                              ; preds = %.lr.ph433
  %146 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %147 unwind label %149

147:                                              ; preds = %145
  br i1 %146, label %148, label %.critedge319

148:                                              ; preds = %147
  store i8 1, ptr %14, align 1, !tbaa !37
  br label %.loopexit345

149:                                              ; preds = %145, %.lr.ph433
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #9
  br label %193

.critedge319:                                     ; preds = %147
  %151 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  %152 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #9
  br i1 %152, label %.lr.ph433, label %.loopexit345

.loopexit345:                                     ; preds = %.critedge319, %135, %148
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #9
  br label %177

153:                                              ; preds = %80
  %154 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %36)
  %155 = load ptr, ptr %154, align 8, !tbaa !40
  %156 = getelementptr inbounds i8, ptr %155, i64 104
  %157 = call noundef ptr @_ZNK3HIR4Enum5Class8opt_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %156)
  %.not300 = icmp eq ptr %157, null
  br i1 %.not300, label %177, label %158

158:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #9
  %159 = call ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %157) #9
  store ptr %159, ptr %22, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #9
  %160 = call ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %157) #9
  store ptr %160, ptr %23, align 8
  %161 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #9
  br i1 %161, label %.lr.ph431, label %.loopexit346

.lr.ph431:                                        ; preds = %158, %.critedge321
  %162 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #9
  %163 = getelementptr inbounds i8, ptr %162, i64 16
  %164 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEENK3$_2clIS4_EES6_RKT_"(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(8) %163)
          to label %165 unwind label %169

165:                                              ; preds = %.lr.ph431
  %166 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %164)
          to label %167 unwind label %169

167:                                              ; preds = %165
  br i1 %166, label %168, label %.critedge321

168:                                              ; preds = %167
  store i8 1, ptr %14, align 1, !tbaa !37
  br label %.loopexit346

169:                                              ; preds = %165, %.lr.ph431
  %170 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #9
  br label %193

.critedge321:                                     ; preds = %167
  %171 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #9
  %172 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR4Enum11DataVariantESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #9
  br i1 %172, label %.lr.ph431, label %.loopexit346

.loopexit346:                                     ; preds = %.critedge321, %158, %168
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #9
  br label %177

173:                                              ; preds = %80
  %174 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding8as_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %36)
  store i8 0, ptr %14, align 1, !tbaa !37
  br label %177

175:                                              ; preds = %80
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding13as_ExternTypeEv(ptr noundef nonnull align 8 dereferenceable(16) %36)
  store i8 0, ptr %14, align 1, !tbaa !37
  br label %177

177:                                              ; preds = %153, %.loopexit346, %107, %113, %.loopexit, %.loopexit345, %175, %173, %80
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #9
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %25, ptr noundef nonnull align 8 dereferenceable(8) %.tr344429)
          to label %178 unwind label %184

178:                                              ; preds = %177
  invoke void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.588") align 8 %24, ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %179 unwind label %186

179:                                              ; preds = %178
  %180 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %48, ptr noundef nonnull align 8 dereferenceable(9) %24)
          to label %181 unwind label %188

181:                                              ; preds = %179
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %24) #9
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #9
  %182 = load i8, ptr %14, align 1, !tbaa !37, !range !35, !noundef !36
  %183 = trunc nuw i8 %182 to i1
  br label %192

184:                                              ; preds = %177
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %191

186:                                              ; preds = %178
  %187 = landingpad { ptr, i32 }
          cleanup
  br label %190

188:                                              ; preds = %179
  %189 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %24) #9
  br label %190

190:                                              ; preds = %188, %186
  %.pn307 = phi { ptr, i32 } [ %189, %188 ], [ %187, %186 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  br label %191

191:                                              ; preds = %190, %184
  %.pn307.pn = phi { ptr, i32 } [ %.pn307, %190 ], [ %185, %184 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #9
  br label %193

192:                                              ; preds = %181, %105
  %.6 = phi i1 [ %183, %181 ], [ true, %105 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #9
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %12) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %12) #9
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  br label %196

193:                                              ; preds = %131, %149, %96, %102, %103, %191, %169
  %.pn307.pn.pn = phi { ptr, i32 } [ %.pn307.pn, %191 ], [ %170, %169 ], [ %97, %96 ], [ %104, %103 ], [ %.pn303, %102 ], [ %150, %149 ], [ %132, %131 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #9
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %12) #9
  br label %194

194:                                              ; preds = %193, %87
  %.pn307.pn.pn.pn = phi { ptr, i32 } [ %.pn307.pn.pn, %193 ], [ %88, %87 ]
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %12) #9
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br label %195

195:                                              ; preds = %194, %85
  %.pn307.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn307.pn.pn.pn, %194 ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  br label %197

196:                                              ; preds = %192, %65
  %.7 = phi i1 [ true, %65 ], [ %.6, %192 ]
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %198

197:                                              ; preds = %195, %75, %66
  %.pn313.pn.pn = phi { ptr, i32 } [ %.pn313.pn, %75 ], [ %.pn307.pn.pn.pn.pn, %195 ], [ %67, %66 ]
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  br label %233

198:                                              ; preds = %196, %52
  %.8 = phi i1 [ %56, %52 ], [ %.7, %196 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  br label %.thread332

.split387:                                        ; preds = %.preheader
  %199 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split390:                                        ; preds = %.preheader
  %200 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split393:                                        ; preds = %.preheader
  %201 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split396:                                        ; preds = %.preheader
  %202 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #9
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(1) %28) #9
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull %27)
          to label %203 unwind label %206

203:                                              ; preds = %.split396
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #9
  %204 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %204, ptr noundef nonnull @.str)
          to label %205 unwind label %208

205:                                              ; preds = %203
  call void @__cxa_throw(ptr nonnull %204, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
  unreachable

206:                                              ; preds = %.split396
  %207 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #9
  br label %233

208:                                              ; preds = %203
  %209 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %204) #9
  br label %233

.split399:                                        ; preds = %.preheader
  %210 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  %211 = getelementptr inbounds i8, ptr %210, i64 4
  %212 = load i32, ptr %211, align 4, !tbaa !41
  %.not = icmp eq i32 %212, 2
  br i1 %.not, label %213, label %.thread332

213:                                              ; preds = %.split399
  %214 = getelementptr inbounds i8, ptr %210, i64 8
  br label %tailrecurse.backedge

tailrecurse.backedge:                             ; preds = %213, %.split414, %.split417
  %.tr344.be = phi ptr [ %214, %213 ], [ %220, %.split414 ], [ %221, %.split417 ]
  %215 = tail call noundef zeroext i1 @_ZNK18StaticTraitResolve12type_is_copyERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %.tr344.be)
  br i1 %215, label %.thread332, label %.preheader

.split402:                                        ; preds = %.preheader
  %216 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split405:                                        ; preds = %.preheader
  %217 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split408:                                        ; preds = %.preheader
  %218 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split411:                                        ; preds = %.preheader
  %219 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split414:                                        ; preds = %.preheader
  %220 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %tailrecurse.backedge

.split417:                                        ; preds = %.preheader
  %221 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %tailrecurse.backedge

.split420:                                        ; preds = %.preheader
  %222 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split423:                                        ; preds = %.preheader
  %223 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  br label %.thread332

.split426:                                        ; preds = %.preheader
  %224 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %32)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #9
  %225 = tail call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %224) #9
  store ptr %225, ptr %29, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #9
  %226 = tail call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %224) #9
  store ptr %226, ptr %30, align 8
  %227 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #9
  br i1 %227, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.split426, %230
  %228 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #9
  %229 = call noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %228)
  br i1 %229, label %234, label %230

230:                                              ; preds = %.lr.ph
  %231 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #9
  %232 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #9
  br i1 %232, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %230, %.split426
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #9
  br label %.thread332

233:                                              ; preds = %206, %208, %197
  %.pn.pn = phi { ptr, i32 } [ %.pn313.pn.pn, %197 ], [ %209, %208 ], [ %207, %206 ]
  resume { ptr, i32 } %.pn.pn

234:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #9
  br label %.thread332

.thread326:                                       ; preds = %.preheader
  tail call void @__assert_fail(ptr noundef nonnull @.str.89, ptr noundef nonnull @.str.5, i32 noundef 3061, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE) #8
  unreachable

.thread332:                                       ; preds = %tailrecurse.backedge, %.split399, %.split428, %234, %._crit_edge, %.split423, %.split420, %.split411, %.split408, %.split405, %.split402, %.split393, %.split390, %.split387, %.split381, %198, %.split383, %41
  %.56 = phi i1 [ true, %234 ], [ false, %._crit_edge ], [ true, %.split423 ], [ true, %.split420 ], [ false, %.split411 ], [ false, %.split408 ], [ false, %.split405 ], [ false, %.split402 ], [ true, %.split393 ], [ true, %.split390 ], [ false, %.split387 ], [ true, %.split381 ], [ %.8, %198 ], [ true, %.split383 ], [ false, %41 ], [ false, %.split428 ], [ false, %.split399 ], [ false, %tailrecurse.backedge ]
  ret i1 %.56

235:                                              ; preds = %95
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFb7ImplRefbEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3HIR7TypeRefEbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS3_INS4_IT0_E4typeEE6__typeEEOS5_OSA_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.588") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEENK3$_2clIS4_EES6_RKT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #8 = { noreturn nounwind }
attributes #9 = { nounwind }
attributes #10 = { 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 = !{!"_ZTS13TargetVersion", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!12, !13, i64 0}
!12 = !{!"_ZTS18TraitResolveCommon", !13, i64 0, !13, i64 8, !13, i64 16, !14, i64 24, !23, i64 72, !29, i64 104, !29, i64 112, !29, i64 120, !29, i64 128, !29, i64 136, !29, i64 144, !29, i64 152, !29, i64 160, !29, i64 168, !29, i64 176, !29, i64 184, !29, i64 192, !29, i64 200, !29, i64 208}
!13 = !{!"any pointer", !9, i64 0}
!14 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !15, i64 0}
!15 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !16, i64 0}
!16 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !17, i64 0, !19, i64 8}
!17 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !18, i64 0}
!18 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!19 = !{!"_ZTSSt15_Rb_tree_header", !20, i64 0, !22, i64 32}
!20 = !{!"_ZTSSt18_Rb_tree_node_base", !21, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!21 = !{!"_ZTSSt14_Rb_tree_color", !9, i64 0}
!22 = !{!"long", !9, i64 0}
!23 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !24, i64 0, !28, i64 24}
!24 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!28 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!29 = !{!"_ZTSN3HIR10SimplePathE", !30, i64 0}
!30 = !{!"_ZTS10ThinVectorI8RcStringE", !13, i64 0}
!31 = !{!32, !34, i64 8}
!32 = !{!"_ZTSSt4pairIKN3HIR7TypeRefEbE", !33, i64 0, !34, i64 8}
!33 = !{!"_ZTSN3HIR7TypeRefE", !13, i64 0}
!34 = !{!"bool", !9, i64 0}
!35 = !{i8 0, i8 2}
!36 = !{}
!37 = !{!34, !34, i64 0}
!38 = !{!39, !13, i64 0}
!39 = !{!"_ZTSZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefEE3$_2", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!40 = !{!13, !13, i64 0}
!41 = !{!42, !45, i64 4}
!42 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !43, i64 0, !45, i64 4, !33, i64 8}
!43 = !{!"_ZTSN3HIR11LifetimeRefE", !44, i64 0}
!44 = !{!"int", !9, i64 0}
!45 = !{!"_ZTSN3HIR10BorrowTypeE", !9, i64 0}


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