; LLVM IR from thepowersgang/mrustc :: src/hir_typeck/helpers.ll (ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE)

; 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.__gnu_cxx::__normal_iterator.153" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.154" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.152" = type { ptr }
%struct.Span = 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.510 = type { ptr }
%class.TraitResolution = type { %struct.TraitResolveCommon, ptr, ptr, ptr, ptr, ptr, %"class.std::vector.216" }
%struct.TraitResolveCommon = type { ptr, ptr, ptr, %"class.std::map.205", %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.205" = type { %"class.std::_Rb_tree.206" }
%"class.std::_Rb_tree.206" = 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.211", [8 x i8] }>
%"class.std::vector.211" = type { %"struct.std::_Vector_base.212" }
%"struct.std::_Vector_base.212" = 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 }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"class.std::vector.216" = type { %"struct.std::_Vector_base.217" }
%"struct.std::_Vector_base.217" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.29" }
%"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.29" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%class.RcString = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.26, %class.ThinVector.27, %class.ThinVector.28 }
%class.ThinVector.26 = type { ptr }
%class.ThinVector.27 = type { ptr }
%class.ThinVector.28 = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.std::unique_ptr.29" = type { %"struct.std::__uniq_ptr_data.30" }
%"struct.std::__uniq_ptr_data.30" = type { %"class.std::__uniq_ptr_impl.31" }
%"class.std::__uniq_ptr_impl.31" = type { %"class.std::tuple.32" }
%"class.std::tuple.32" = type { %"struct.std::_Tuple_impl.33" }
%"struct.std::_Tuple_impl.33" = type { %"struct.std::_Head_base.36" }
%"struct.std::_Head_base.36" = type { ptr }
%"struct.HIR::TypeData_TraitObject" = type <{ %"class.HIR::TraitPath", %"class.std::vector.45", %"struct.HIR::LifetimeRef", [4 x i8] }>
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr.29", %"class.HIR::GenericPath", %"class.std::map", %"class.std::map.40", ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.40" = type { %"class.std::_Rb_tree.41" }
%"class.std::_Rb_tree.41" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.50", %"class.std::vector.55", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.50" = type { %"struct.std::_Vector_base.51" }
%"struct.std::_Vector_base.51" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.55" = type { %"struct.std::_Vector_base.56" }
%"struct.std::_Vector_base.56" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn" = type <{ %"class.HIR::Path", i32, [4 x i8] }>
%"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.16", [8 x i8] }
%"class.std::unique_ptr.16" = type { %"struct.std::__uniq_ptr_data.17" }
%"struct.std::__uniq_ptr_data.17" = type { %"class.std::__uniq_ptr_impl.18" }
%"class.std::__uniq_ptr_impl.18" = type { %"class.std::tuple.19" }
%"class.std::tuple.19" = type { %"struct.std::_Tuple_impl.20" }
%"struct.std::_Tuple_impl.20" = type { %"struct.std::_Head_base.23" }
%"struct.std::_Head_base.23" = type { ptr }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"class.HIR::TypeData_NamedFunction_Ty" = type { i32, %"union.HIR::TypeData_NamedFunction_Ty::DataUnion" }
%"union.HIR::TypeData_NamedFunction_Ty::DataUnion" = type { %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" }
%"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" = type { ptr, i64 }

@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE = external hidden unnamed_addr constant [72 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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 uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1) #6 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i1, align 1
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i8, align 1
  %13 = alloca ptr, align 8
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca i8, align 1
  %19 = alloca ptr, align 8
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator.153", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator.153", align 8
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca i8, align 1
  %29 = alloca ptr, align 8
  %30 = alloca i8, align 1
  %31 = alloca ptr, align 8
  %32 = alloca i8, align 1
  %33 = alloca ptr, align 8
  %34 = alloca i8, align 1
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.__gnu_cxx::__normal_iterator.154", align 8
  %38 = alloca %"class.__gnu_cxx::__normal_iterator.154", align 8
  %39 = alloca ptr, align 8
  %40 = alloca i8, align 1
  %41 = alloca ptr, align 8
  %42 = alloca i8, align 1
  %43 = alloca ptr, align 8
  %44 = alloca i8, align 1
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca ptr, align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %49 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %50 = alloca ptr, align 8
  %51 = alloca i8, align 1
  %52 = alloca ptr, align 8
  %53 = alloca i8, align 1
  %54 = alloca ptr, align 8
  %55 = alloca i8, align 1
  %56 = alloca ptr, align 8
  %57 = alloca i8, align 1
  %58 = alloca ptr, align 8
  %59 = alloca i8, align 1
  %60 = alloca ptr, align 8
  %61 = alloca i8, align 1
  %62 = alloca ptr, align 8
  %63 = alloca %struct.Span, align 8
  %64 = alloca %"class.std::function", align 8
  %65 = alloca %class.anon.510, align 8
  %66 = alloca ptr, align 8
  %67 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %68 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #7
  store i8 1, ptr %6, align 1, !tbaa !9
  br label %69

69:                                               ; preds = %662, %2
  %70 = load i8, ptr %6, align 1, !tbaa !9, !range !11, !noundef !12
  %71 = trunc i8 %70 to i1
  br i1 %71, label %73, label %72

72:                                               ; preds = %69
  store i32 2, ptr %7, align 4
  br label %663

73:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %74)
  store ptr %75, ptr %8, align 8, !tbaa !5
  br label %76

76:                                               ; preds = %658, %73
  %77 = load i8, ptr %6, align 1, !tbaa !9, !range !11, !noundef !12
  %78 = trunc i8 %77 to i1
  br i1 %78, label %80, label %79

79:                                               ; preds = %76
  store i32 5, ptr %7, align 4
  br label %659

80:                                               ; preds = %76
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %81)
  switch i32 %82, label %657 [
    i32 0, label %83
    i32 1, label %84
    i32 2, label %118
    i32 3, label %140
    i32 4, label %162
    i32 5, label %197
    i32 6, label %219
    i32 7, label %274
    i32 8, label %418
    i32 9, label %443
    i32 10, label %468
    i32 11, label %516
    i32 12, label %541
    i32 13, label %566
    i32 14, label %591
    i32 15, label %613
    i32 16, label %635
  ]

83:                                               ; preds = %80
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 2040, ptr noundef @__PRETTY_FUNCTION__._ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE) #8
  unreachable

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

85:                                               ; preds = %114, %84
  %86 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %87 = trunc i8 %86 to i1
  br i1 %87, label %89, label %88

88:                                               ; preds = %85
  store i32 9, ptr %7, align 4
  br label %115

89:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %90 = load ptr, ptr %8, align 8, !tbaa !5
  %91 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %90)
  store ptr %91, ptr %10, align 8, !tbaa !5
  br label %92

92:                                               ; preds = %110, %89
  %93 = load ptr, ptr %10, align 8, !tbaa !5
  %94 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %95 = trunc i8 %94 to i1
  br i1 %95, label %97, label %96

96:                                               ; preds = %92
  store i32 12, ptr %7, align 4
  br label %111

97:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %98 = getelementptr inbounds %class.TraitResolution, ptr %68, i32 0, i32 2
  %99 = load ptr, ptr %98, align 8, !tbaa !13
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %99, ptr noundef nonnull align 8 dereferenceable(8) %100)
  store ptr %101, ptr %11, align 8, !tbaa !5
  %102 = load ptr, ptr %11, align 8, !tbaa !5
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  %104 = call noundef zeroext i1 @_ZNK3HIR7TypeRefneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %102, ptr noundef nonnull align 8 dereferenceable(8) %103)
  br i1 %104, label %105, label %108

105:                                              ; preds = %97
  %106 = load ptr, ptr %11, align 8, !tbaa !5
  %107 = call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(8) %106)
  store i1 %107, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %109

108:                                              ; preds = %97
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %109

109:                                              ; preds = %108, %105
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %111

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

111:                                              ; preds = %109, %96
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  %112 = load i32, ptr %7, align 4
  switch i32 %112, label %115 [
    i32 12, label %113
  ]

113:                                              ; preds = %111
  br label %114

114:                                              ; preds = %113
  store i8 0, ptr %9, align 1, !tbaa !9
  br label %85, !llvm.loop !39

115:                                              ; preds = %111, %88
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  %116 = load i32, ptr %7, align 4
  switch i32 %116, label %659 [
    i32 9, label %117
  ]

117:                                              ; preds = %115
  br label %657

118:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #7
  store i8 1, ptr %12, align 1, !tbaa !9
  br label %119

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

122:                                              ; preds = %119
  store i32 15, ptr %7, align 4
  br label %137

123:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %124 = load ptr, ptr %8, align 8, !tbaa !5
  %125 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %124)
  store ptr %125, ptr %13, align 8, !tbaa !5
  br label %126

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

130:                                              ; preds = %126
  store i32 18, ptr %7, align 4
  br label %133

131:                                              ; preds = %126
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %133

132:                                              ; No predecessors!
  store i8 0, ptr %12, align 1, !tbaa !9
  br label %126, !llvm.loop !40

133:                                              ; preds = %131, %130
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  %134 = load i32, ptr %7, align 4
  switch i32 %134, label %137 [
    i32 18, label %135
  ]

135:                                              ; preds = %133
  br label %136

136:                                              ; preds = %135
  store i8 0, ptr %12, align 1, !tbaa !9
  br label %119, !llvm.loop !41

137:                                              ; preds = %133, %122
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  %138 = load i32, ptr %7, align 4
  switch i32 %138, label %659 [
    i32 15, label %139
  ]

139:                                              ; preds = %137
  br label %657

140:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #7
  store i8 1, ptr %14, align 1, !tbaa !9
  br label %141

141:                                              ; preds = %158, %140
  %142 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %143 = trunc i8 %142 to i1
  br i1 %143, label %145, label %144

144:                                              ; preds = %141
  store i32 21, ptr %7, align 4
  br label %159

145:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  %147 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %146)
  store ptr %147, ptr %15, align 8, !tbaa !5
  br label %148

148:                                              ; preds = %154, %145
  %149 = load ptr, ptr %15, align 8, !tbaa !5
  %150 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %151 = trunc i8 %150 to i1
  br i1 %151, label %153, label %152

152:                                              ; preds = %148
  store i32 24, ptr %7, align 4
  br label %155

153:                                              ; preds = %148
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %155

154:                                              ; No predecessors!
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %148, !llvm.loop !42

155:                                              ; preds = %153, %152
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  %156 = load i32, ptr %7, align 4
  switch i32 %156, label %159 [
    i32 24, label %157
  ]

157:                                              ; preds = %155
  br label %158

158:                                              ; preds = %157
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %141, !llvm.loop !43

159:                                              ; preds = %155, %144
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  %160 = load i32, ptr %7, align 4
  switch i32 %160, label %659 [
    i32 21, label %161
  ]

161:                                              ; preds = %159
  br label %657

162:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #7
  store i8 1, ptr %16, align 1, !tbaa !9
  br label %163

163:                                              ; preds = %193, %162
  %164 = load i8, ptr %16, align 1, !tbaa !9, !range !11, !noundef !12
  %165 = trunc i8 %164 to i1
  br i1 %165, label %167, label %166

166:                                              ; preds = %163
  store i32 27, ptr %7, align 4
  br label %194

167:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %168 = load ptr, ptr %8, align 8, !tbaa !5
  %169 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %168)
  store ptr %169, ptr %17, align 8, !tbaa !5
  br label %170

170:                                              ; preds = %189, %167
  %171 = load ptr, ptr %17, align 8, !tbaa !5
  %172 = load i8, ptr %16, align 1, !tbaa !9, !range !11, !noundef !12
  %173 = trunc i8 %172 to i1
  br i1 %173, label %175, label %174

174:                                              ; preds = %170
  store i32 30, ptr %7, align 4
  br label %190

175:                                              ; preds = %170
  %176 = load ptr, ptr %17, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %176, i32 0, i32 0
  %178 = getelementptr inbounds %"class.HIR::Path", ptr %177, i32 0, i32 0
  %179 = call noundef zeroext i1 @_ZNK3HIR4Path4Data12is_UfcsKnownEv(ptr noundef nonnull align 8 dereferenceable(88) %178)
  br i1 %179, label %180, label %185

180:                                              ; preds = %175
  %181 = load ptr, ptr %17, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %181, i32 0, i32 1
  %183 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %182)
  br i1 %183, label %184, label %185

184:                                              ; preds = %180
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %190

185:                                              ; preds = %180, %175
  %186 = load ptr, ptr %17, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %186, i32 0, i32 0
  %188 = call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H10check_pathERKS_RKNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(88) %187)
  store i1 %188, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %190

189:                                              ; No predecessors!
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %170, !llvm.loop !44

190:                                              ; preds = %185, %184, %174
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  %191 = load i32, ptr %7, align 4
  switch i32 %191, label %194 [
    i32 30, label %192
  ]

192:                                              ; preds = %190
  br label %193

193:                                              ; preds = %192
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %163, !llvm.loop !45

194:                                              ; preds = %190, %166
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  %195 = load i32, ptr %7, align 4
  switch i32 %195, label %659 [
    i32 27, label %196
  ]

196:                                              ; preds = %194
  br label %657

197:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #7
  store i8 1, ptr %18, align 1, !tbaa !9
  br label %198

198:                                              ; preds = %215, %197
  %199 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %200 = trunc i8 %199 to i1
  br i1 %200, label %202, label %201

201:                                              ; preds = %198
  store i32 33, ptr %7, align 4
  br label %216

202:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %203 = load ptr, ptr %8, align 8, !tbaa !5
  %204 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %203)
  store ptr %204, ptr %19, align 8, !tbaa !5
  br label %205

205:                                              ; preds = %211, %202
  %206 = load ptr, ptr %19, align 8, !tbaa !5
  %207 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %208 = trunc i8 %207 to i1
  br i1 %208, label %210, label %209

209:                                              ; preds = %205
  store i32 36, ptr %7, align 4
  br label %212

210:                                              ; preds = %205
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %212

211:                                              ; No predecessors!
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %205, !llvm.loop !46

212:                                              ; preds = %210, %209
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  %213 = load i32, ptr %7, align 4
  switch i32 %213, label %216 [
    i32 36, label %214
  ]

214:                                              ; preds = %212
  br label %215

215:                                              ; preds = %214
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %198, !llvm.loop !47

216:                                              ; preds = %212, %201
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  %217 = load i32, ptr %7, align 4
  switch i32 %217, label %659 [
    i32 33, label %218
  ]

218:                                              ; preds = %216
  br label %657

219:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #7
  store i8 1, ptr %20, align 1, !tbaa !9
  br label %220

220:                                              ; preds = %270, %219
  %221 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %222 = trunc i8 %221 to i1
  br i1 %222, label %224, label %223

223:                                              ; preds = %220
  store i32 39, ptr %7, align 4
  br label %271

224:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %225 = load ptr, ptr %8, align 8, !tbaa !5
  %226 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %225)
  store ptr %226, ptr %21, align 8, !tbaa !5
  br label %227

227:                                              ; preds = %266, %224
  %228 = load ptr, ptr %21, align 8, !tbaa !5
  %229 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %230 = trunc i8 %229 to i1
  br i1 %230, label %232, label %231

231:                                              ; preds = %227
  store i32 42, ptr %7, align 4
  br label %267

232:                                              ; preds = %227
  %233 = load ptr, ptr %21, align 8, !tbaa !5
  %234 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %233, i32 0, i32 0
  %235 = getelementptr inbounds %"class.HIR::TraitPath", ptr %234, i32 0, i32 1
  %236 = getelementptr inbounds %"class.HIR::GenericPath", ptr %235, i32 0, i32 1
  %237 = call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H16check_pathparamsERKS_RKNS0_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(24) %236)
  br i1 %237, label %238, label %239

238:                                              ; preds = %232
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %267

239:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %240 = load ptr, ptr %21, align 8, !tbaa !5
  %241 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %240, i32 0, i32 1
  store ptr %241, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %242 = load ptr, ptr %22, align 8, !tbaa !5
  %243 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %242) #7
  %244 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.153", ptr %23, i32 0, i32 0
  store ptr %243, ptr %244, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %245 = load ptr, ptr %22, align 8, !tbaa !5
  %246 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %245) #7
  %247 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.153", ptr %24, i32 0, i32 0
  store ptr %246, ptr %247, align 8
  br label %248

248:                                              ; preds = %261, %239
  %249 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  br i1 %249, label %251, label %250

250:                                              ; preds = %248
  store i32 45, ptr %7, align 4
  br label %263

251:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %252 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  store ptr %252, ptr %25, align 8, !tbaa !5
  %253 = load ptr, ptr %25, align 8, !tbaa !5
  %254 = getelementptr inbounds %"class.HIR::GenericPath", ptr %253, i32 0, i32 1
  %255 = call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H16check_pathparamsERKS_RKNS0_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(24) %254)
  br i1 %255, label %256, label %257

256:                                              ; preds = %251
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %258

257:                                              ; preds = %251
  store i32 0, ptr %7, align 4
  br label %258

258:                                              ; preds = %257, %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  %259 = load i32, ptr %7, align 4
  switch i32 %259, label %263 [
    i32 0, label %260
  ]

260:                                              ; preds = %258
  br label %261

261:                                              ; preds = %260
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  br label %248

263:                                              ; preds = %258, %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  %264 = load i32, ptr %7, align 4
  switch i32 %264, label %267 [
    i32 45, label %265
  ]

265:                                              ; preds = %263
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %267

266:                                              ; No predecessors!
  store i8 0, ptr %20, align 1, !tbaa !9
  br label %227, !llvm.loop !48

267:                                              ; preds = %265, %263, %238, %231
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  %268 = load i32, ptr %7, align 4
  switch i32 %268, label %271 [
    i32 42, label %269
  ]

269:                                              ; preds = %267
  br label %270

270:                                              ; preds = %269
  store i8 0, ptr %20, align 1, !tbaa !9
  br label %220, !llvm.loop !49

271:                                              ; preds = %267, %223
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  %272 = load i32, ptr %7, align 4
  switch i32 %272, label %659 [
    i32 39, label %273
  ]

273:                                              ; preds = %271
  br label %657

274:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #7
  store i8 1, ptr %26, align 1, !tbaa !9
  br label %275

275:                                              ; preds = %414, %274
  %276 = load i8, ptr %26, align 1, !tbaa !9, !range !11, !noundef !12
  %277 = trunc i8 %276 to i1
  br i1 %277, label %279, label %278

278:                                              ; preds = %275
  store i32 47, ptr %7, align 4
  br label %415

279:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %280 = load ptr, ptr %8, align 8, !tbaa !5
  %281 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %280)
  store ptr %281, ptr %27, align 8, !tbaa !5
  br label %282

282:                                              ; preds = %410, %279
  %283 = load ptr, ptr %27, align 8, !tbaa !5
  %284 = load i8, ptr %26, align 1, !tbaa !9, !range !11, !noundef !12
  %285 = trunc i8 %284 to i1
  br i1 %285, label %287, label %286

286:                                              ; preds = %282
  store i32 50, ptr %7, align 4
  br label %411

287:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #7
  store i8 1, ptr %28, align 1, !tbaa !9
  br label %288

288:                                              ; preds = %379, %287
  %289 = load i8, ptr %28, align 1, !tbaa !9, !range !11, !noundef !12
  %290 = trunc i8 %289 to i1
  br i1 %290, label %292, label %291

291:                                              ; preds = %288
  store i32 53, ptr %7, align 4
  br label %380

292:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %293 = load ptr, ptr %27, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %293, i32 0, i32 3
  store ptr %294, ptr %29, align 8, !tbaa !5
  br label %295

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

298:                                              ; preds = %295
  store i32 56, ptr %7, align 4
  br label %376

299:                                              ; preds = %295
  %300 = load ptr, ptr %29, align 8, !tbaa !5
  %301 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %300)
  switch i32 %301, label %374 [
    i32 0, label %302
    i32 1, label %303
    i32 2, label %330
    i32 3, label %356
  ]

302:                                              ; preds = %299
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 2074, ptr noundef @__PRETTY_FUNCTION__._ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE) #8
  unreachable

303:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #7
  store i8 1, ptr %30, align 1, !tbaa !9
  br label %304

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

307:                                              ; preds = %304
  store i32 60, ptr %7, align 4
  br label %327

308:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %309 = load ptr, ptr %29, align 8, !tbaa !5
  %310 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %309)
  store ptr %310, ptr %31, align 8, !tbaa !5
  br label %311

311:                                              ; preds = %322, %308
  %312 = load ptr, ptr %31, align 8, !tbaa !5
  %313 = load i8, ptr %30, align 1, !tbaa !9, !range !11, !noundef !12
  %314 = trunc i8 %313 to i1
  br i1 %314, label %316, label %315

315:                                              ; preds = %311
  store i32 63, ptr %7, align 4
  br label %323

316:                                              ; preds = %311
  %317 = load ptr, ptr %31, align 8, !tbaa !5
  %318 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %317, i32 0, i32 0
  %319 = call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H10check_pathERKS_RKNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(88) %318)
  br i1 %319, label %320, label %321

320:                                              ; preds = %316
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %323

321:                                              ; preds = %316
  br label %322

322:                                              ; preds = %321
  store i8 0, ptr %30, align 1, !tbaa !9
  br label %311, !llvm.loop !50

323:                                              ; preds = %320, %315
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  %324 = load i32, ptr %7, align 4
  switch i32 %324, label %327 [
    i32 63, label %325
  ]

325:                                              ; preds = %323
  br label %326

326:                                              ; preds = %325
  store i8 0, ptr %30, align 1, !tbaa !9
  br label %304, !llvm.loop !51

327:                                              ; preds = %323, %307
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  %328 = load i32, ptr %7, align 4
  switch i32 %328, label %376 [
    i32 60, label %329
  ]

329:                                              ; preds = %327
  br label %374

330:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #7
  store i8 1, ptr %32, align 1, !tbaa !9
  br label %331

331:                                              ; preds = %352, %330
  %332 = load i8, ptr %32, align 1, !tbaa !9, !range !11, !noundef !12
  %333 = trunc i8 %332 to i1
  br i1 %333, label %335, label %334

334:                                              ; preds = %331
  store i32 66, ptr %7, align 4
  br label %353

335:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %336 = load ptr, ptr %29, align 8, !tbaa !5
  %337 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %336)
  store ptr %337, ptr %33, align 8, !tbaa !5
  br label %338

338:                                              ; preds = %348, %335
  %339 = load ptr, ptr %33, align 8, !tbaa !5
  %340 = load i8, ptr %32, align 1, !tbaa !9, !range !11, !noundef !12
  %341 = trunc i8 %340 to i1
  br i1 %341, label %343, label %342

342:                                              ; preds = %338
  store i32 69, ptr %7, align 4
  br label %349

343:                                              ; preds = %338
  %344 = load ptr, ptr %33, align 8, !tbaa !5
  %345 = call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(8) %344)
  br i1 %345, label %346, label %347

346:                                              ; preds = %343
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %349

347:                                              ; preds = %343
  br label %348

348:                                              ; preds = %347
  store i8 0, ptr %32, align 1, !tbaa !9
  br label %338, !llvm.loop !52

349:                                              ; preds = %346, %342
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  %350 = load i32, ptr %7, align 4
  switch i32 %350, label %353 [
    i32 69, label %351
  ]

351:                                              ; preds = %349
  br label %352

352:                                              ; preds = %351
  store i8 0, ptr %32, align 1, !tbaa !9
  br label %331, !llvm.loop !53

353:                                              ; preds = %349, %334
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #7
  %354 = load i32, ptr %7, align 4
  switch i32 %354, label %376 [
    i32 66, label %355
  ]

355:                                              ; preds = %353
  br label %374

356:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #7
  store i8 1, ptr %34, align 1, !tbaa !9
  br label %357

357:                                              ; preds = %372, %356
  %358 = load i8, ptr %34, align 1, !tbaa !9, !range !11, !noundef !12
  %359 = trunc i8 %358 to i1
  br i1 %359, label %361, label %360

360:                                              ; preds = %357
  store i32 72, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  br label %373

361:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %362 = load ptr, ptr %29, align 8, !tbaa !5
  %363 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %362)
  store ptr %363, ptr %35, align 8, !tbaa !5
  br label %364

364:                                              ; preds = %370, %361
  %365 = load ptr, ptr %35, align 8, !tbaa !5
  %366 = load i8, ptr %34, align 1, !tbaa !9, !range !11, !noundef !12
  %367 = trunc i8 %366 to i1
  br i1 %367, label %369, label %368

368:                                              ; preds = %364
  store i32 75, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %371

369:                                              ; preds = %364
  br label %370

370:                                              ; preds = %369
  store i8 0, ptr %34, align 1, !tbaa !9
  br label %364, !llvm.loop !54

371:                                              ; preds = %368
  br label %372

372:                                              ; preds = %371
  store i8 0, ptr %34, align 1, !tbaa !9
  br label %357, !llvm.loop !55

373:                                              ; preds = %360
  br label %374

374:                                              ; preds = %373, %355, %329, %299
  br label %375

375:                                              ; preds = %374
  store i8 0, ptr %28, align 1, !tbaa !9
  br label %295, !llvm.loop !56

376:                                              ; preds = %353, %327, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  %377 = load i32, ptr %7, align 4
  switch i32 %377, label %380 [
    i32 56, label %378
  ]

378:                                              ; preds = %376
  br label %379

379:                                              ; preds = %378
  store i8 0, ptr %28, align 1, !tbaa !9
  br label %288, !llvm.loop !57

380:                                              ; preds = %376, %291
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  %381 = load i32, ptr %7, align 4
  switch i32 %381, label %411 [
    i32 53, label %382
  ]

382:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %383 = load ptr, ptr %27, align 8, !tbaa !5
  %384 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %383, i32 0, i32 1
  store ptr %384, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %385 = load ptr, ptr %36, align 8, !tbaa !5
  %386 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %385) #7
  %387 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.154", ptr %37, i32 0, i32 0
  store ptr %386, ptr %387, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %388 = load ptr, ptr %36, align 8, !tbaa !5
  %389 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %388) #7
  %390 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.154", ptr %38, i32 0, i32 0
  store ptr %389, ptr %390, align 8
  br label %391

391:                                              ; preds = %405, %382
  %392 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38) #7
  br i1 %392, label %394, label %393

393:                                              ; preds = %391
  store i32 78, ptr %7, align 4
  br label %407

394:                                              ; preds = %391
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %395 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #7
  store ptr %395, ptr %39, align 8, !tbaa !5
  %396 = load ptr, ptr %39, align 8, !tbaa !5
  %397 = getelementptr inbounds %"class.HIR::TraitPath", ptr %396, i32 0, i32 1
  %398 = getelementptr inbounds %"class.HIR::GenericPath", ptr %397, i32 0, i32 1
  %399 = call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H16check_pathparamsERKS_RKNS0_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(24) %398)
  br i1 %399, label %400, label %401

400:                                              ; preds = %394
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %402

401:                                              ; preds = %394
  store i32 0, ptr %7, align 4
  br label %402

402:                                              ; preds = %401, %400
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  %403 = load i32, ptr %7, align 4
  switch i32 %403, label %407 [
    i32 0, label %404
  ]

404:                                              ; preds = %402
  br label %405

405:                                              ; preds = %404
  %406 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #7
  br label %391

407:                                              ; preds = %402, %393
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  %408 = load i32, ptr %7, align 4
  switch i32 %408, label %411 [
    i32 78, label %409
  ]

409:                                              ; preds = %407
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %411

410:                                              ; No predecessors!
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %282, !llvm.loop !58

411:                                              ; preds = %409, %407, %380, %286
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  %412 = load i32, ptr %7, align 4
  switch i32 %412, label %415 [
    i32 50, label %413
  ]

413:                                              ; preds = %411
  br label %414

414:                                              ; preds = %413
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %275, !llvm.loop !59

415:                                              ; preds = %411, %278
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #7
  %416 = load i32, ptr %7, align 4
  switch i32 %416, label %659 [
    i32 47, label %417
  ]

417:                                              ; preds = %415
  br label %657

418:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #7
  store i8 1, ptr %40, align 1, !tbaa !9
  br label %419

419:                                              ; preds = %439, %418
  %420 = load i8, ptr %40, align 1, !tbaa !9, !range !11, !noundef !12
  %421 = trunc i8 %420 to i1
  br i1 %421, label %423, label %422

422:                                              ; preds = %419
  store i32 80, ptr %7, align 4
  br label %440

423:                                              ; preds = %419
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %424 = load ptr, ptr %8, align 8, !tbaa !5
  %425 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %424)
  store ptr %425, ptr %41, align 8, !tbaa !5
  br label %426

426:                                              ; preds = %435, %423
  %427 = load ptr, ptr %41, align 8, !tbaa !5
  %428 = load i8, ptr %40, align 1, !tbaa !9, !range !11, !noundef !12
  %429 = trunc i8 %428 to i1
  br i1 %429, label %431, label %430

430:                                              ; preds = %426
  store i32 83, ptr %7, align 4
  br label %436

431:                                              ; preds = %426
  %432 = load ptr, ptr %41, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %432, i32 0, i32 0
  %434 = call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(8) %433)
  store i1 %434, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %436

435:                                              ; No predecessors!
  store i8 0, ptr %40, align 1, !tbaa !9
  br label %426, !llvm.loop !60

436:                                              ; preds = %431, %430
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  %437 = load i32, ptr %7, align 4
  switch i32 %437, label %440 [
    i32 83, label %438
  ]

438:                                              ; preds = %436
  br label %439

439:                                              ; preds = %438
  store i8 0, ptr %40, align 1, !tbaa !9
  br label %419, !llvm.loop !61

440:                                              ; preds = %436, %422
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #7
  %441 = load i32, ptr %7, align 4
  switch i32 %441, label %659 [
    i32 80, label %442
  ]

442:                                              ; preds = %440
  br label %657

443:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #7
  store i8 1, ptr %42, align 1, !tbaa !9
  br label %444

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

447:                                              ; preds = %444
  store i32 86, ptr %7, align 4
  br label %465

448:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %449 = load ptr, ptr %8, align 8, !tbaa !5
  %450 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %449)
  store ptr %450, ptr %43, align 8, !tbaa !5
  br label %451

451:                                              ; preds = %460, %448
  %452 = load ptr, ptr %43, align 8, !tbaa !5
  %453 = load i8, ptr %42, align 1, !tbaa !9, !range !11, !noundef !12
  %454 = trunc i8 %453 to i1
  br i1 %454, label %456, label %455

455:                                              ; preds = %451
  store i32 89, ptr %7, align 4
  br label %461

456:                                              ; preds = %451
  %457 = load ptr, ptr %43, align 8, !tbaa !5
  %458 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %457, i32 0, i32 0
  %459 = call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(8) %458)
  store i1 %459, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %461

460:                                              ; No predecessors!
  store i8 0, ptr %42, align 1, !tbaa !9
  br label %451, !llvm.loop !62

461:                                              ; preds = %456, %455
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  %462 = load i32, ptr %7, align 4
  switch i32 %462, label %465 [
    i32 89, label %463
  ]

463:                                              ; preds = %461
  br label %464

464:                                              ; preds = %463
  store i8 0, ptr %42, align 1, !tbaa !9
  br label %444, !llvm.loop !63

465:                                              ; preds = %461, %447
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #7
  %466 = load i32, ptr %7, align 4
  switch i32 %466, label %659 [
    i32 86, label %467
  ]

467:                                              ; preds = %465
  br label %657

468:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #7
  store i8 1, ptr %44, align 1, !tbaa !9
  br label %469

469:                                              ; preds = %512, %468
  %470 = load i8, ptr %44, align 1, !tbaa !9, !range !11, !noundef !12
  %471 = trunc i8 %470 to i1
  br i1 %471, label %473, label %472

472:                                              ; preds = %469
  store i32 92, ptr %7, align 4
  br label %513

473:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  %474 = load ptr, ptr %8, align 8, !tbaa !5
  %475 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %474)
  store ptr %475, ptr %45, align 8, !tbaa !5
  br label %476

476:                                              ; preds = %508, %473
  %477 = load ptr, ptr %45, align 8, !tbaa !5
  %478 = load i8, ptr %44, align 1, !tbaa !9, !range !11, !noundef !12
  %479 = trunc i8 %478 to i1
  br i1 %479, label %481, label %480

480:                                              ; preds = %476
  store i32 95, ptr %7, align 4
  br label %509

481:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #7
  store i8 0, ptr %46, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %482 = load ptr, ptr %45, align 8, !tbaa !5
  store ptr %482, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  %483 = load ptr, ptr %47, align 8, !tbaa !5
  %484 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %483) #7
  %485 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.152", ptr %48, i32 0, i32 0
  store ptr %484, ptr %485, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %486 = load ptr, ptr %47, align 8, !tbaa !5
  %487 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %486) #7
  %488 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.152", ptr %49, i32 0, i32 0
  store ptr %487, ptr %488, align 8
  br label %489

489:                                              ; preds = %503, %481
  %490 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %49) #7
  br i1 %490, label %492, label %491

491:                                              ; preds = %489
  store i32 98, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  br label %505

492:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  %493 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #7
  store ptr %493, ptr %50, align 8, !tbaa !5
  %494 = load ptr, ptr %50, align 8, !tbaa !5
  %495 = call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(8) %494)
  %496 = zext i1 %495 to i32
  %497 = load i8, ptr %46, align 1, !tbaa !9, !range !11, !noundef !12
  %498 = trunc i8 %497 to i1
  %499 = zext i1 %498 to i32
  %500 = or i32 %499, %496
  %501 = icmp ne i32 %500, 0
  %502 = zext i1 %501 to i8
  store i8 %502, ptr %46, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  br label %503

503:                                              ; preds = %492
  %504 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #7
  br label %489

505:                                              ; preds = %491
  %506 = load i8, ptr %46, align 1, !tbaa !9, !range !11, !noundef !12
  %507 = trunc i8 %506 to i1
  store i1 %507, ptr %3, align 1
  store i32 1, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #7
  br label %509

508:                                              ; No predecessors!
  store i8 0, ptr %44, align 1, !tbaa !9
  br label %476, !llvm.loop !64

509:                                              ; preds = %505, %480
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  %510 = load i32, ptr %7, align 4
  switch i32 %510, label %513 [
    i32 95, label %511
  ]

511:                                              ; preds = %509
  br label %512

512:                                              ; preds = %511
  store i8 0, ptr %44, align 1, !tbaa !9
  br label %469, !llvm.loop !65

513:                                              ; preds = %509, %472
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #7
  %514 = load i32, ptr %7, align 4
  switch i32 %514, label %659 [
    i32 92, label %515
  ]

515:                                              ; preds = %513
  br label %657

516:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %51) #7
  store i8 1, ptr %51, align 1, !tbaa !9
  br label %517

517:                                              ; preds = %537, %516
  %518 = load i8, ptr %51, align 1, !tbaa !9, !range !11, !noundef !12
  %519 = trunc i8 %518 to i1
  br i1 %519, label %521, label %520

520:                                              ; preds = %517
  store i32 100, ptr %7, align 4
  br label %538

521:                                              ; preds = %517
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  %522 = load ptr, ptr %8, align 8, !tbaa !5
  %523 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %522)
  store ptr %523, ptr %52, align 8, !tbaa !5
  br label %524

524:                                              ; preds = %533, %521
  %525 = load ptr, ptr %52, align 8, !tbaa !5
  %526 = load i8, ptr %51, align 1, !tbaa !9, !range !11, !noundef !12
  %527 = trunc i8 %526 to i1
  br i1 %527, label %529, label %528

528:                                              ; preds = %524
  store i32 103, ptr %7, align 4
  br label %534

529:                                              ; preds = %524
  %530 = load ptr, ptr %52, align 8, !tbaa !5
  %531 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %530, i32 0, i32 2
  %532 = call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(8) %531)
  store i1 %532, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %534

533:                                              ; No predecessors!
  store i8 0, ptr %51, align 1, !tbaa !9
  br label %524, !llvm.loop !66

534:                                              ; preds = %529, %528
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  %535 = load i32, ptr %7, align 4
  switch i32 %535, label %538 [
    i32 103, label %536
  ]

536:                                              ; preds = %534
  br label %537

537:                                              ; preds = %536
  store i8 0, ptr %51, align 1, !tbaa !9
  br label %517, !llvm.loop !67

538:                                              ; preds = %534, %520
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #7
  %539 = load i32, ptr %7, align 4
  switch i32 %539, label %659 [
    i32 100, label %540
  ]

540:                                              ; preds = %538
  br label %657

541:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #7
  store i8 1, ptr %53, align 1, !tbaa !9
  br label %542

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

545:                                              ; preds = %542
  store i32 106, ptr %7, align 4
  br label %563

546:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  %547 = load ptr, ptr %8, align 8, !tbaa !5
  %548 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %547)
  store ptr %548, ptr %54, align 8, !tbaa !5
  br label %549

549:                                              ; preds = %558, %546
  %550 = load ptr, ptr %54, align 8, !tbaa !5
  %551 = load i8, ptr %53, align 1, !tbaa !9, !range !11, !noundef !12
  %552 = trunc i8 %551 to i1
  br i1 %552, label %554, label %553

553:                                              ; preds = %549
  store i32 109, ptr %7, align 4
  br label %559

554:                                              ; preds = %549
  %555 = load ptr, ptr %54, align 8, !tbaa !5
  %556 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %555, i32 0, i32 1
  %557 = call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(8) %556)
  store i1 %557, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %559

558:                                              ; No predecessors!
  store i8 0, ptr %53, align 1, !tbaa !9
  br label %549, !llvm.loop !68

559:                                              ; preds = %554, %553
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  %560 = load i32, ptr %7, align 4
  switch i32 %560, label %563 [
    i32 109, label %561
  ]

561:                                              ; preds = %559
  br label %562

562:                                              ; preds = %561
  store i8 0, ptr %53, align 1, !tbaa !9
  br label %542, !llvm.loop !69

563:                                              ; preds = %559, %545
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #7
  %564 = load i32, ptr %7, align 4
  switch i32 %564, label %659 [
    i32 106, label %565
  ]

565:                                              ; preds = %563
  br label %657

566:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #7
  store i8 1, ptr %55, align 1, !tbaa !9
  br label %567

567:                                              ; preds = %587, %566
  %568 = load i8, ptr %55, align 1, !tbaa !9, !range !11, !noundef !12
  %569 = trunc i8 %568 to i1
  br i1 %569, label %571, label %570

570:                                              ; preds = %567
  store i32 112, ptr %7, align 4
  br label %588

571:                                              ; preds = %567
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  %572 = load ptr, ptr %8, align 8, !tbaa !5
  %573 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %572)
  store ptr %573, ptr %56, align 8, !tbaa !5
  br label %574

574:                                              ; preds = %583, %571
  %575 = load ptr, ptr %56, align 8, !tbaa !5
  %576 = load i8, ptr %55, align 1, !tbaa !9, !range !11, !noundef !12
  %577 = trunc i8 %576 to i1
  br i1 %577, label %579, label %578

578:                                              ; preds = %574
  store i32 115, ptr %7, align 4
  br label %584

579:                                              ; preds = %574
  %580 = load ptr, ptr %56, align 8, !tbaa !5
  %581 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %580, i32 0, i32 0
  %582 = call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H10check_pathERKS_RKNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(280) %68, ptr noundef nonnull align 8 dereferenceable(88) %581)
  store i1 %582, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %584

583:                                              ; No predecessors!
  store i8 0, ptr %55, align 1, !tbaa !9
  br label %574, !llvm.loop !70

584:                                              ; preds = %579, %578
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  %585 = load i32, ptr %7, align 4
  switch i32 %585, label %588 [
    i32 115, label %586
  ]

586:                                              ; preds = %584
  br label %587

587:                                              ; preds = %586
  store i8 0, ptr %55, align 1, !tbaa !9
  br label %567, !llvm.loop !71

588:                                              ; preds = %584, %570
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #7
  %589 = load i32, ptr %7, align 4
  switch i32 %589, label %659 [
    i32 112, label %590
  ]

590:                                              ; preds = %588
  br label %657

591:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #7
  store i8 1, ptr %57, align 1, !tbaa !9
  br label %592

592:                                              ; preds = %609, %591
  %593 = load i8, ptr %57, align 1, !tbaa !9, !range !11, !noundef !12
  %594 = trunc i8 %593 to i1
  br i1 %594, label %596, label %595

595:                                              ; preds = %592
  store i32 118, ptr %7, align 4
  br label %610

596:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  %597 = load ptr, ptr %8, align 8, !tbaa !5
  %598 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %597)
  store ptr %598, ptr %58, align 8, !tbaa !5
  br label %599

599:                                              ; preds = %605, %596
  %600 = load ptr, ptr %58, align 8, !tbaa !5
  %601 = load i8, ptr %57, align 1, !tbaa !9, !range !11, !noundef !12
  %602 = trunc i8 %601 to i1
  br i1 %602, label %604, label %603

603:                                              ; preds = %599
  store i32 121, ptr %7, align 4
  br label %606

604:                                              ; preds = %599
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %606

605:                                              ; No predecessors!
  store i8 0, ptr %57, align 1, !tbaa !9
  br label %599, !llvm.loop !72

606:                                              ; preds = %604, %603
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  %607 = load i32, ptr %7, align 4
  switch i32 %607, label %610 [
    i32 121, label %608
  ]

608:                                              ; preds = %606
  br label %609

609:                                              ; preds = %608
  store i8 0, ptr %57, align 1, !tbaa !9
  br label %592, !llvm.loop !73

610:                                              ; preds = %606, %595
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #7
  %611 = load i32, ptr %7, align 4
  switch i32 %611, label %659 [
    i32 118, label %612
  ]

612:                                              ; preds = %610
  br label %657

613:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #7
  store i8 1, ptr %59, align 1, !tbaa !9
  br label %614

614:                                              ; preds = %631, %613
  %615 = load i8, ptr %59, align 1, !tbaa !9, !range !11, !noundef !12
  %616 = trunc i8 %615 to i1
  br i1 %616, label %618, label %617

617:                                              ; preds = %614
  store i32 124, ptr %7, align 4
  br label %632

618:                                              ; preds = %614
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  %619 = load ptr, ptr %8, align 8, !tbaa !5
  %620 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %619)
  store ptr %620, ptr %60, align 8, !tbaa !5
  br label %621

621:                                              ; preds = %627, %618
  %622 = load ptr, ptr %60, align 8, !tbaa !5
  %623 = load i8, ptr %59, align 1, !tbaa !9, !range !11, !noundef !12
  %624 = trunc i8 %623 to i1
  br i1 %624, label %626, label %625

625:                                              ; preds = %621
  store i32 127, ptr %7, align 4
  br label %628

626:                                              ; preds = %621
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %628

627:                                              ; No predecessors!
  store i8 0, ptr %59, align 1, !tbaa !9
  br label %621, !llvm.loop !74

628:                                              ; preds = %626, %625
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  %629 = load i32, ptr %7, align 4
  switch i32 %629, label %632 [
    i32 127, label %630
  ]

630:                                              ; preds = %628
  br label %631

631:                                              ; preds = %630
  store i8 0, ptr %59, align 1, !tbaa !9
  br label %614, !llvm.loop !75

632:                                              ; preds = %628, %617
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #7
  %633 = load i32, ptr %7, align 4
  switch i32 %633, label %659 [
    i32 124, label %634
  ]

634:                                              ; preds = %632
  br label %657

635:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #7
  store i8 1, ptr %61, align 1, !tbaa !9
  br label %636

636:                                              ; preds = %653, %635
  %637 = load i8, ptr %61, align 1, !tbaa !9, !range !11, !noundef !12
  %638 = trunc i8 %637 to i1
  br i1 %638, label %640, label %639

639:                                              ; preds = %636
  store i32 130, ptr %7, align 4
  br label %654

640:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #7
  %641 = load ptr, ptr %8, align 8, !tbaa !5
  %642 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %641)
  store ptr %642, ptr %62, align 8, !tbaa !5
  br label %643

643:                                              ; preds = %649, %640
  %644 = load ptr, ptr %62, align 8, !tbaa !5
  %645 = load i8, ptr %61, align 1, !tbaa !9, !range !11, !noundef !12
  %646 = trunc i8 %645 to i1
  br i1 %646, label %648, label %647

647:                                              ; preds = %643
  store i32 133, ptr %7, align 4
  br label %650

648:                                              ; preds = %643
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %650

649:                                              ; No predecessors!
  store i8 0, ptr %61, align 1, !tbaa !9
  br label %643, !llvm.loop !76

650:                                              ; preds = %648, %647
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #7
  %651 = load i32, ptr %7, align 4
  switch i32 %651, label %654 [
    i32 133, label %652
  ]

652:                                              ; preds = %650
  br label %653

653:                                              ; preds = %652
  store i8 0, ptr %61, align 1, !tbaa !9
  br label %636, !llvm.loop !77

654:                                              ; preds = %650, %639
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #7
  %655 = load i32, ptr %7, align 4
  switch i32 %655, label %659 [
    i32 130, label %656
  ]

656:                                              ; preds = %654
  br label %657

657:                                              ; preds = %656, %634, %612, %590, %565, %540, %515, %467, %442, %417, %273, %218, %196, %161, %139, %117, %80
  br label %658

658:                                              ; preds = %657
  store i8 0, ptr %6, align 1, !tbaa !9
  br label %76, !llvm.loop !78

659:                                              ; preds = %654, %632, %610, %588, %563, %538, %513, %465, %440, %415, %271, %216, %194, %159, %137, %115, %79
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  %660 = load i32, ptr %7, align 4
  switch i32 %660, label %663 [
    i32 5, label %661
  ]

661:                                              ; preds = %659
  br label %662

662:                                              ; preds = %661
  store i8 0, ptr %6, align 1, !tbaa !9
  br label %69, !llvm.loop !79

663:                                              ; preds = %659, %72
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #7
  %664 = load i32, ptr %7, align 4
  switch i32 %664, label %688 [
    i32 2, label %665
    i32 1, label %681
  ]

665:                                              ; preds = %663
  br label %666

666:                                              ; preds = %665
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %63)
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  %667 = getelementptr inbounds %class.anon.510, ptr %65, i32 0, i32 0
  %668 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %668, ptr %667, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 8 dereferenceable(8) %65) #7
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef %64)
          to label %669 unwind label %672

669:                                              ; preds = %666
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %63) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  %670 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %670, ptr noundef @.str.8)
          to label %671 unwind label %676

671:                                              ; preds = %669
  call void @__cxa_throw(ptr %670, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #9
  unreachable

672:                                              ; preds = %666
  %673 = landingpad { ptr, i32 }
          cleanup
  %674 = extractvalue { ptr, i32 } %673, 0
  store ptr %674, ptr %66, align 8
  %675 = extractvalue { ptr, i32 } %673, 1
  store i32 %675, ptr %67, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %63) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %683

676:                                              ; preds = %669
  %677 = landingpad { ptr, i32 }
          cleanup
  %678 = extractvalue { ptr, i32 } %677, 0
  store ptr %678, ptr %66, align 8
  %679 = extractvalue { ptr, i32 } %677, 1
  store i32 %679, ptr %67, align 4
  call void @__cxa_free_exception(ptr %670) #7
  br label %683

680:                                              ; No predecessors!
  unreachable

681:                                              ; preds = %663
  %682 = load i1, ptr %3, align 1
  ret i1 %682

683:                                              ; preds = %676, %672
  %684 = load ptr, ptr %66, align 8
  %685 = load i32, ptr %67, align 4
  %686 = insertvalue { ptr, i32 } poison, ptr %684, 0
  %687 = insertvalue { ptr, i32 } %686, i32 %685, 1
  resume { ptr, i32 } %687

688:                                              ; preds = %663
  unreachable
}

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H10check_pathERKS_RKNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 8 dereferenceable(88)) #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H16check_pathparamsERKS_RKNS0_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

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

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

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


; 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.__gnu_cxx::__normal_iterator.153" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.154" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.152" = type { ptr }
%struct.Span = 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.510 = type { ptr }

@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE = external hidden unnamed_addr constant [72 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: 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 #1 align 2

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

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

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

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

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 uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(8)) local_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 #3 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 #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 #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 #3 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 #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 #3 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 #3 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 #3 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 #3 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 #3 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 #3 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 #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1) local_unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
.split452:
  %2 = alloca %"class.__gnu_cxx::__normal_iterator.153", align 8
  %3 = alloca %"class.__gnu_cxx::__normal_iterator.153", align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.154", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator.154", align 8
  %6 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %8 = alloca %struct.Span, align 8
  %9 = alloca %"class.std::function", align 8
  %10 = alloca %class.anon.510, align 8
  %11 = getelementptr inbounds i8, ptr %0, i64 224
  br label %tailrecurse

tailrecurse:                                      ; preds = %tailrecurse.backedge, %.split452
  %.tr338 = phi ptr [ %1, %.split452 ], [ %.tr338.be, %tailrecurse.backedge ]
  %12 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %.tr338)
  %13 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  switch i32 %13, label %.thread314 [
    i32 0, label %.split
    i32 1, label %.split380
    i32 2, label %.split382
    i32 3, label %.split385
    i32 4, label %.split388
    i32 5, label %.split391
    i32 6, label %.split394
    i32 7, label %.lr.ph472.split
    i32 8, label %.split400
    i32 9, label %.split403
    i32 10, label %.split406
    i32 11, label %.split409
    i32 12, label %.split412
    i32 13, label %.split415
    i32 14, label %.split418
    i32 15, label %.split421
    i32 16, label %.split424
  ], !llvm.loop !5

.split:                                           ; preds = %tailrecurse
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 2040, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE) #7
  unreachable

.split380:                                        ; preds = %tailrecurse
  %14 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %15 = load ptr, ptr %11, align 8, !tbaa !7
  %16 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %15, ptr noundef nonnull align 8 dereferenceable(8) %.tr338)
  %17 = tail call noundef zeroext i1 @_ZNK3HIR7TypeRefneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %.tr338)
  br i1 %17, label %tailrecurse.backedge, label %.thread320

.split382:                                        ; preds = %tailrecurse
  %18 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  br label %.thread320

.split385:                                        ; preds = %tailrecurse
  %19 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  br label %.thread320

.split388:                                        ; preds = %tailrecurse
  %20 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %21 = tail call noundef zeroext i1 @_ZNK3HIR4Path4Data12is_UfcsKnownEv(ptr noundef nonnull align 8 dereferenceable(88) %20)
  br i1 %21, label %22, label %25

22:                                               ; preds = %.split388
  %23 = getelementptr inbounds i8, ptr %20, i64 88
  %24 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %23)
  br i1 %24, label %.thread320, label %25

25:                                               ; preds = %22, %.split388
  %26 = tail call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H10check_pathERKS_RKNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(88) %20)
  br label %.thread320

.split391:                                        ; preds = %tailrecurse
  %27 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  br label %.thread320

.split394:                                        ; preds = %tailrecurse
  %28 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %29 = getelementptr inbounds i8, ptr %28, i64 16
  %30 = tail call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H16check_pathparamsERKS_RKNS0_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(24) %29)
  br i1 %30, label %.thread320, label %31

31:                                               ; preds = %.split394
  %32 = getelementptr inbounds i8, ptr %28, i64 144
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #8
  %33 = tail call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  store ptr %33, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #8
  %34 = tail call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  store ptr %34, ptr %3, align 8
  %35 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #8
  br i1 %35, label %.lr.ph519, label %._crit_edge520

.lr.ph519:                                        ; preds = %31, %39
  %36 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %2) #8
  %37 = getelementptr inbounds i8, ptr %36, i64 8
  %38 = call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H16check_pathparamsERKS_RKNS0_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(24) %37)
  br i1 %38, label %select.unfold308, label %39

39:                                               ; preds = %.lr.ph519
  %40 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %2) #8
  %41 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #8
  br i1 %41, label %.lr.ph519, label %._crit_edge520

._crit_edge520:                                   ; preds = %39, %31
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #8
  br label %.thread320

.lr.ph472.split:                                  ; preds = %tailrecurse
  %42 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %43 = getelementptr inbounds i8, ptr %42, i64 56
  %44 = tail call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %43)
  switch i32 %44, label %.loopexit346 [
    i32 0, label %.split483
    i32 1, label %.preheader.split
    i32 2, label %.preheader342.split
    i32 3, label %.preheader344.split
  ]

.preheader344.split:                              ; preds = %.lr.ph472.split
  %45 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %43)
  br label %.loopexit346

.preheader342.split:                              ; preds = %.lr.ph472.split
  %46 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %43)
  %47 = tail call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %46)
  br i1 %47, label %.thread320, label %.loopexit346, !llvm.loop !34

.preheader.split:                                 ; preds = %.lr.ph472.split
  %48 = tail call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %43)
  %49 = tail call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H10check_pathERKS_RKNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(88) %48)
  br i1 %49, label %.thread320, label %.loopexit346, !llvm.loop !35

.split483:                                        ; preds = %.lr.ph472.split
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 2074, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE) #7
  unreachable

.loopexit346:                                     ; preds = %.preheader342.split, %.preheader.split, %.preheader344.split, %.lr.ph472.split
  %50 = getelementptr inbounds i8, ptr %42, i64 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  %51 = tail call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #8
  store ptr %51, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  %52 = tail call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #8
  store ptr %52, ptr %5, align 8
  %53 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  br i1 %53, label %.lr.ph516, label %._crit_edge517

.lr.ph516:                                        ; preds = %.loopexit346, %57
  %54 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  %55 = getelementptr inbounds i8, ptr %54, i64 16
  %56 = call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H16check_pathparamsERKS_RKNS0_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(24) %55)
  br i1 %56, label %select.unfold, label %57

57:                                               ; preds = %.lr.ph516
  %58 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  %59 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  br i1 %59, label %.lr.ph516, label %._crit_edge517

._crit_edge517:                                   ; preds = %57, %.loopexit346
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  br label %.thread320

select.unfold:                                    ; preds = %.lr.ph516
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  br label %.thread320

.split400:                                        ; preds = %tailrecurse
  %60 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  br label %tailrecurse.backedge

tailrecurse.backedge:                             ; preds = %.split400, %.split403, %.split409, %.split412, %.split380
  %.tr338.be = phi ptr [ %60, %.split400 ], [ %61, %.split403 ], [ %72, %.split409 ], [ %74, %.split412 ], [ %16, %.split380 ]
  br label %tailrecurse

.split403:                                        ; preds = %tailrecurse
  %61 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  br label %tailrecurse.backedge

.split406:                                        ; preds = %tailrecurse
  %62 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #8
  %63 = tail call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #8
  store ptr %63, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %64 = tail call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #8
  store ptr %64, ptr %7, align 8
  %65 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  br i1 %65, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph, %.split406
  %.0263.lcssa = phi i1 [ false, %.split406 ], [ %68, %.lr.ph ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  br label %.thread320

.lr.ph:                                           ; preds = %.split406, %.lr.ph
  %.0263453 = phi i1 [ %68, %.lr.ph ], [ false, %.split406 ]
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #8
  %67 = call noundef zeroext i1 @_ZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %66)
  %68 = or i1 %.0263453, %67
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #8
  %70 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  br i1 %70, label %.lr.ph, label %._crit_edge

.split409:                                        ; preds = %tailrecurse
  %71 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %72 = getelementptr inbounds i8, ptr %71, i64 8
  br label %tailrecurse.backedge

.split412:                                        ; preds = %tailrecurse
  %73 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %74 = getelementptr inbounds i8, ptr %73, i64 8
  br label %tailrecurse.backedge

.split415:                                        ; preds = %tailrecurse
  %75 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %76 = tail call noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H10check_pathERKS_RKNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(88) %75)
  br label %.thread320

.split418:                                        ; preds = %tailrecurse
  %77 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  br label %.thread320

.split421:                                        ; preds = %tailrecurse
  %78 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  br label %.thread320

.split424:                                        ; preds = %tailrecurse
  %79 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  br label %.thread320

select.unfold308:                                 ; preds = %.lr.ph519
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #8
  br label %.thread320

.thread314:                                       ; preds = %tailrecurse
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  store ptr %.tr338, ptr %10, align 8, !tbaa !36
  call void @"_ZNSt8functionIFvRSoEEC2IZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull %9)
          to label %80 unwind label %83

80:                                               ; preds = %.thread314
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  %81 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %81, ptr noundef nonnull @.str.8)
          to label %82 unwind label %85

82:                                               ; preds = %80
  call void @__cxa_throw(ptr nonnull %81, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #9
  unreachable

83:                                               ; preds = %.thread314
  %84 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %87

85:                                               ; preds = %80
  %86 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %81) #8
  br label %87

.thread320:                                       ; preds = %.split380, %.preheader342.split, %.preheader.split, %select.unfold308, %select.unfold, %._crit_edge517, %._crit_edge520, %.split424, %.split421, %.split418, %.split415, %._crit_edge, %.split391, %.split385, %.split382, %25, %22, %.split394
  %.69.ph325 = phi i1 [ false, %.split424 ], [ false, %.split421 ], [ false, %.split418 ], [ %76, %.split415 ], [ %.0263.lcssa, %._crit_edge ], [ false, %.split391 ], [ false, %.split385 ], [ false, %.split382 ], [ %26, %25 ], [ true, %22 ], [ true, %.split394 ], [ false, %._crit_edge520 ], [ true, %select.unfold308 ], [ true, %select.unfold ], [ false, %._crit_edge517 ], [ true, %.preheader.split ], [ true, %.preheader342.split ], [ false, %.split380 ]
  ret i1 %.69.ph325

87:                                               ; preds = %85, %83
  %.pn = phi { ptr, i32 } [ %86, %85 ], [ %84, %83 ]
  resume { ptr, i32 } %.pn
}

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H10check_pathERKS_RKNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZZNK15TraitResolution19has_associated_typeERKN3HIR7TypeRefEEN1H16check_pathparamsERKS_RKNS0_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { 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 = { "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 = { 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 }
attributes #8 = { nounwind }
attributes #9 = { 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, !10, i64 224}
!8 = !{!"_ZTS15TraitResolution", !9, i64 0, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240, !10, i64 248, !30, i64 256}
!9 = !{!"_ZTS18TraitResolveCommon", !10, i64 0, !10, i64 8, !10, i64 16, !13, i64 24, !22, i64 72, !28, i64 104, !28, i64 112, !28, i64 120, !28, i64 128, !28, i64 136, !28, i64 144, !28, i64 152, !28, i64 160, !28, i64 168, !28, i64 176, !28, i64 184, !28, i64 192, !28, i64 200, !28, i64 208}
!10 = !{!"any pointer", !11, i64 0}
!11 = !{!"omnipotent char", !12, i64 0}
!12 = !{!"Simple C++ TBAA"}
!13 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !14, i64 0}
!14 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !15, i64 0}
!15 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !16, i64 0, !18, i64 8}
!16 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !17, i64 0}
!17 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!18 = !{!"_ZTSSt15_Rb_tree_header", !19, i64 0, !21, i64 32}
!19 = !{!"_ZTSSt18_Rb_tree_node_base", !20, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!20 = !{!"_ZTSSt14_Rb_tree_color", !11, i64 0}
!21 = !{!"long", !11, i64 0}
!22 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !23, i64 0, !27, i64 24}
!23 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!27 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!28 = !{!"_ZTSN3HIR10SimplePathE", !29, i64 0}
!29 = !{!"_ZTS10ThinVectorI8RcStringE", !10, i64 0}
!30 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !31, i64 0}
!31 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!34 = distinct !{!34, !6}
!35 = distinct !{!35, !6}
!36 = !{!10, !10, i64 0}


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