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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.HIR::TypeRef" = type { ptr }
%"struct.HMTypeInferrence::ResolvePlaceholders" = type { %"class.HIR::ResolvePlaceholders", ptr }
%"class.HIR::ResolvePlaceholders" = type { ptr }
%"class.std::function.426" = 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.429 = type { ptr, ptr, ptr, ptr }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%class.anon.430 = type { ptr }
%"struct.HIR::GenericParams::PrintArgs" = type { ptr }
%"class.typecheck::OwnedImplMatcher" = type { %"class.HIR::MatchGenerics", ptr }
%"class.HIR::MatchGenerics" = type { ptr }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.122" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.122" = type { %"struct.std::_Vector_base.123" }
%"struct.std::_Vector_base.123" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.441 = type { i8 }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector.17 }
%class.ThinVector.17 = type { ptr }
%class.RcString = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector, %class.ThinVector.15, %class.ThinVector.16 }
%class.ThinVector = type { ptr }
%class.ThinVector.15 = type { ptr }
%class.ThinVector.16 = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.19" }
%"struct.std::_Head_base.19" = type { ptr }
%struct.Context = type { ptr, %"class.std::vector.56", %class.HMTypeInferrence, %class.TraitResolution, i32, %"class.std::vector.87", %"class.std::vector.92", %"class.std::vector.97", %"class.std::vector.102", %"class.std::vector.107", %"class.std::vector.111", %"class.std::map.116", %"struct.HIR::SimplePath" }
%"class.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = type { %"struct.std::_Vector_base<Context::Binding, std::allocator<Context::Binding>>::_Vector_impl" }
%"struct.std::_Vector_base<Context::Binding, std::allocator<Context::Binding>>::_Vector_impl" = type { %"struct.std::_Vector_base<Context::Binding, std::allocator<Context::Binding>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Context::Binding, std::allocator<Context::Binding>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.HMTypeInferrence = type <{ %"class.std::vector.61", %"class.std::vector.66", i8, [7 x i8] }>
%"class.std::vector.61" = type { %"struct.std::_Vector_base.62" }
%"struct.std::_Vector_base.62" = type { %"struct.std::_Vector_base<HMTypeInferrence::IVar, std::allocator<HMTypeInferrence::IVar>>::_Vector_impl" }
%"struct.std::_Vector_base<HMTypeInferrence::IVar, std::allocator<HMTypeInferrence::IVar>>::_Vector_impl" = type { %"struct.std::_Vector_base<HMTypeInferrence::IVar, std::allocator<HMTypeInferrence::IVar>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HMTypeInferrence::IVar, std::allocator<HMTypeInferrence::IVar>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.66" = type { %"struct.std::_Vector_base.67" }
%"struct.std::_Vector_base.67" = type { %"struct.std::_Vector_base<HMTypeInferrence::IVarValue, std::allocator<HMTypeInferrence::IVarValue>>::_Vector_impl" }
%"struct.std::_Vector_base<HMTypeInferrence::IVarValue, std::allocator<HMTypeInferrence::IVarValue>>::_Vector_impl" = type { %"struct.std::_Vector_base<HMTypeInferrence::IVarValue, std::allocator<HMTypeInferrence::IVarValue>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HMTypeInferrence::IVarValue, std::allocator<HMTypeInferrence::IVarValue>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.TraitResolution = type { %struct.TraitResolveCommon, ptr, ptr, ptr, ptr, ptr, %"class.std::vector.82" }
%struct.TraitResolveCommon = type { ptr, ptr, ptr, %"class.std::map.71", %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.71" = type { %"class.std::_Rb_tree.72" }
%"class.std::_Rb_tree.72" = 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.77", [8 x i8] }>
%"class.std::vector.77" = type { %"struct.std::_Vector_base.78" }
%"struct.std::_Vector_base.78" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.82" = type { %"struct.std::_Vector_base.83" }
%"struct.std::_Vector_base.83" = 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 }
%"class.std::vector.87" = type { %"struct.std::_Vector_base.88" }
%"struct.std::_Vector_base.88" = type { %"struct.std::_Vector_base<std::unique_ptr<Context::Coercion>, std::allocator<std::unique_ptr<Context::Coercion>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<Context::Coercion>, std::allocator<std::unique_ptr<Context::Coercion>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<Context::Coercion>, std::allocator<std::unique_ptr<Context::Coercion>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<Context::Coercion>, std::allocator<std::unique_ptr<Context::Coercion>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.92" = type { %"struct.std::_Vector_base.93" }
%"struct.std::_Vector_base.93" = type { %"struct.std::_Vector_base<Context::Associated, std::allocator<Context::Associated>>::_Vector_impl" }
%"struct.std::_Vector_base<Context::Associated, std::allocator<Context::Associated>>::_Vector_impl" = type { %"struct.std::_Vector_base<Context::Associated, std::allocator<Context::Associated>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Context::Associated, std::allocator<Context::Associated>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.97" = type { %"struct.std::_Vector_base.98" }
%"struct.std::_Vector_base.98" = type { %"struct.std::_Vector_base<HIR::ExprNode *, std::allocator<HIR::ExprNode *>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ExprNode *, std::allocator<HIR::ExprNode *>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ExprNode *, std::allocator<HIR::ExprNode *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ExprNode *, std::allocator<HIR::ExprNode *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.102" = type { %"struct.std::_Vector_base.103" }
%"struct.std::_Vector_base.103" = type { %"struct.std::_Vector_base<std::unique_ptr<Context::Revisitor>, std::allocator<std::unique_ptr<Context::Revisitor>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<Context::Revisitor>, std::allocator<std::unique_ptr<Context::Revisitor>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<Context::Revisitor>, std::allocator<std::unique_ptr<Context::Revisitor>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<Context::Revisitor>, std::allocator<std::unique_ptr<Context::Revisitor>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.107" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::vector.111" = type { %"struct.std::_Vector_base.112" }
%"struct.std::_Vector_base.112" = type { %"struct.std::_Vector_base<Context::IVarPossible, std::allocator<Context::IVarPossible>>::_Vector_impl" }
%"struct.std::_Vector_base<Context::IVarPossible, std::allocator<Context::IVarPossible>>::_Vector_impl" = type { %"struct.std::_Vector_base<Context::IVarPossible, std::allocator<Context::IVarPossible>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Context::IVarPossible, std::allocator<Context::IVarPossible>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.116" = type { %"class.std::_Rb_tree.117" }
%"class.std::_Rb_tree.117" = type { %"struct.std::_Rb_tree<HIR::TypeData_ErasedType_AliasInner *, std::pair<HIR::TypeData_ErasedType_AliasInner *const, Context::TaitEntry>, std::_Select1st<std::pair<HIR::TypeData_ErasedType_AliasInner *const, Context::TaitEntry>>, std::less<HIR::TypeData_ErasedType_AliasInner *>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::TypeData_ErasedType_AliasInner *, std::pair<HIR::TypeData_ErasedType_AliasInner *const, Context::TaitEntry>, std::_Select1st<std::pair<HIR::TypeData_ErasedType_AliasInner *const, Context::TaitEntry>>, std::less<HIR::TypeData_ErasedType_AliasInner *>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.HIR::Path::Data::Data_UfcsInherent" = type { %"class.HIR::TypeRef", %class.RcString, %"struct.HIR::PathParams", %"struct.HIR::PathParams" }
%"class.HIR::TypeImpl" = type { %"class.HIR::GenericParams", %"class.HIR::TypeRef", %"class.std::map.431", %"class.std::map.436", %"struct.HIR::SimplePath" }
%"class.HIR::GenericParams" = type { %"class.std::vector", %"class.std::vector.0", %"class.std::vector.5", %"class.std::vector.10" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.431" = type { %"class.std::_Rb_tree.432" }
%"class.std::_Rb_tree.432" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TypeImpl::VisImplEnt<HIR::Function>>, std::_Select1st<std::pair<const RcString, HIR::TypeImpl::VisImplEnt<HIR::Function>>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TypeImpl::VisImplEnt<HIR::Function>>, std::_Select1st<std::pair<const RcString, HIR::TypeImpl::VisImplEnt<HIR::Function>>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.436" = type { %"class.std::_Rb_tree.437" }
%"class.std::_Rb_tree.437" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TypeImpl::VisImplEnt<HIR::Constant>>, std::_Select1st<std::pair<const RcString, HIR::TypeImpl::VisImplEnt<HIR::Constant>>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TypeImpl::VisImplEnt<HIR::Constant>>, std::_Select1st<std::pair<const RcString, HIR::TypeImpl::VisImplEnt<HIR::Constant>>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.HIR::Function" = type { i8, %"struct.HIR::Linkage", i32, %"class.HIR::TypeRef", %class.RcString, i8, i8, %"class.HIR::GenericParams", %"class.std::vector.305", i8, %"class.HIR::TypeRef", %"class.HIR::ExprPtr", %"struct.HIR::Function::Markings" }
%"struct.HIR::Linkage" = type { i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.304 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.304 = type { i64, [8 x i8] }
%"class.std::vector.305" = type { %"struct.std::_Vector_base.306" }
%"struct.std::_Vector_base.306" = type { %"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::ExprPtr" = type { %"class.HIR::ExprPtrInner", %"class.std::vector.51", %"class.std::vector.51", %"class.MIR::FunctionPointer", %"class.HIR::ExprStatePtr" }
%"class.HIR::ExprPtrInner" = type { ptr }
%"class.std::vector.51" = type { %"struct.std::_Vector_base.52" }
%"struct.std::_Vector_base.52" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::FunctionPointer" = type { ptr }
%"class.HIR::ExprStatePtr" = type { ptr }
%"struct.HIR::Function::Markings" = type { %"class.std::vector.310", i8, i32 }
%"class.std::vector.310" = type { %"struct.std::_Vector_base.311" }
%"struct.std::_Vector_base.311" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::ExprCallCache" = type { %"class.std::vector.51", ptr, ptr, ptr, %"class.std::unique_ptr.140" }
%"class.std::unique_ptr.140" = type { %"struct.std::__uniq_ptr_data.141" }
%"struct.std::__uniq_ptr_data.141" = type { %"class.std::__uniq_ptr_impl.142" }
%"class.std::__uniq_ptr_impl.142" = type { %"class.std::tuple.143" }
%"class.std::tuple.143" = type { %"struct.std::_Tuple_impl.144" }
%"struct.std::_Tuple_impl.144" = type { %"struct.std::_Head_base.147" }
%"struct.std::_Head_base.147" = type { ptr }

@g_debug_indent_level = external global i32, align 4
@.str.3 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.16 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@__PRETTY_FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE = external hidden unnamed_addr constant [145 x i8], align 1
@__FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE = external hidden unnamed_addr constant [39 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [18 x i8], align 1

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

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

declare noundef zeroext i1 @_Z13debug_enabledv() #2

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #3

declare noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #4 align 2

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9typecheck15fix_param_countERK4SpanR7ContextRKN3HIR7TypeRefEbRKNS5_4PathERKNS5_13GenericParamsERNS5_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(24)) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9typecheck21apply_bounds_as_rulesER7ContextRK4SpanRKN3HIR13GenericParamsERK13Monomorphiserb(ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), i1 noundef zeroext) #4

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #8

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(64) ptr @_ZN3HIR4Path4Data15as_UfcsInherentEv(ptr noundef nonnull align 8 dereferenceable(88)) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #4 personality ptr @__gxx_personality_v0 {
  %6 = alloca i1, align 1
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca %"struct.HMTypeInferrence::ResolvePlaceholders", align 8
  %16 = alloca %"class.std::function.426", align 8
  %17 = alloca %class.anon.429, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca %struct.Span, align 8
  %21 = alloca %"class.std::function", align 8
  %22 = alloca %class.anon.430, align 8
  %23 = alloca i32, align 4
  %24 = alloca %"struct.HIR::GenericParams::PrintArgs", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"class.typecheck::OwnedImplMatcher", align 8
  %27 = alloca i32, align 4
  %28 = alloca %"struct.HMTypeInferrence::ResolvePlaceholders", align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca %"class.HIR::TypeRef", align 8
  %34 = alloca %"class.HIR::TypeRef", align 8
  %35 = alloca %struct.MonomorphStatePtr, align 8
  %36 = alloca %"class.HIR::TypeRef", align 8
  %37 = alloca %struct.Span, align 8
  %38 = alloca %"class.std::function", align 8
  %39 = alloca %class.anon.441, align 1
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca %"class.HIR::TypeRef", align 8
  %45 = alloca %"class.HIR::TypeRef", align 8
  %46 = alloca ptr, align 8
  %47 = alloca %"class.HIR::TypeRef", align 8
  %48 = alloca ptr, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = getelementptr inbounds %"class.HIR::Path", ptr %49, i32 0, i32 0
  %51 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZN3HIR4Path4Data15as_UfcsInherentEv(ptr noundef nonnull align 8 dereferenceable(88) %50)
  store ptr %51, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  store i32 0, ptr %14, align 4, !tbaa !9
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.Context, ptr %52, i32 0, i32 0
  %54 = load ptr, ptr %53, align 8, !tbaa !11
  %55 = load ptr, ptr %12, align 8, !tbaa !5
  %56 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %55, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #10
  %57 = load ptr, ptr %7, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.Context, ptr %57, i32 0, i32 2
  call void @_ZNK16HMTypeInferrence22callback_resolve_inferEv(ptr dead_on_unwind writable sret(%"struct.HMTypeInferrence::ResolvePlaceholders") align 8 %15, ptr noundef nonnull align 8 dereferenceable(49) %58)
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #10
  %59 = getelementptr inbounds %class.anon.429, ptr %17, i32 0, i32 0
  %60 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %60, ptr %59, align 8, !tbaa !5
  %61 = getelementptr inbounds %class.anon.429, ptr %17, i32 0, i32 1
  %62 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %62, ptr %61, align 8, !tbaa !5
  %63 = getelementptr inbounds %class.anon.429, ptr %17, i32 0, i32 2
  store ptr %13, ptr %63, align 8, !tbaa !5
  %64 = getelementptr inbounds %class.anon.429, ptr %17, i32 0, i32 3
  store ptr %14, ptr %64, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3HIR8TypeImplEEEC2IZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRNS0_4PathERNS0_13ExprCallCacheERPKNS0_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %17)
  %65 = invoke noundef zeroext i1 @_ZNK3HIR5Crate15find_type_implsERKNS_7TypeRefERKNS_19ResolvePlaceholdersESt8functionIFbRKNS_8TypeImplEEE(ptr noundef nonnull align 8 dereferenceable(944) %54, ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef %16)
          to label %66 unwind label %78

66:                                               ; preds = %5
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #10
  %67 = load ptr, ptr %11, align 8, !tbaa !5
  %68 = load ptr, ptr %67, align 8, !tbaa !5
  %69 = icmp ne ptr %68, null
  br i1 %69, label %92, label %70

70:                                               ; preds = %66
  br label %71

71:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %72 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %72)
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %73 = getelementptr inbounds %class.anon.430, ptr %22, i32 0, i32 0
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %74, ptr %73, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNSA_13ExprCallCacheERPKNSA_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #10
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %20, i32 noundef 0, ptr noundef %21)
          to label %75 unwind label %82

75:                                               ; preds = %71
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  %76 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %76, ptr noundef @.str.16)
          to label %77 unwind label %86

77:                                               ; preds = %75
  call void @__cxa_throw(ptr %76, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #11
  unreachable

78:                                               ; preds = %5
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %18, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %19, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #10
  br label %369

82:                                               ; preds = %71
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %18, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %19, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  br label %369

86:                                               ; preds = %75
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %18, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %19, align 4
  call void @__cxa_free_exception(ptr %76) #10
  br label %369

90:                                               ; No predecessors!
  br label %91

91:                                               ; preds = %90
  br label %92

92:                                               ; preds = %91, %66
  %93 = load i32, ptr %14, align 4, !tbaa !9
  %94 = icmp ugt i32 %93, 1
  br i1 %94, label %95, label %96

95:                                               ; preds = %92
  store i1 false, ptr %6, align 1
  store i32 1, ptr %23, align 4
  br label %367

96:                                               ; preds = %92
  %97 = load ptr, ptr %13, align 8, !tbaa !5
  %98 = icmp ne ptr %97, null
  br i1 %98, label %99, label %100

99:                                               ; preds = %96
  br label %102

100:                                              ; preds = %96
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.3, i32 noundef 406, ptr noundef @__PRETTY_FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE) #12
  unreachable

101:                                              ; No predecessors!
  br label %102

102:                                              ; preds = %101, %99
  br label %103

103:                                              ; preds = %102
  %104 = call noundef zeroext i1 @_Z13debug_enabledv()
  br i1 %104, label %105, label %120

105:                                              ; preds = %103
  %106 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %107 = call noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %106, ptr noundef @__FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE)
  %108 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %107, ptr noundef @.str.18)
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %109 = load ptr, ptr %13, align 8, !tbaa !5
  %110 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %109, i32 0, i32 0
  %111 = call ptr @_ZNK3HIR13GenericParams8fmt_argsEv(ptr noundef nonnull align 8 dereferenceable(96) %110)
  %112 = getelementptr inbounds %"struct.HIR::GenericParams::PrintArgs", ptr %24, i32 0, i32 0
  store ptr %111, ptr %112, align 8
  %113 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_13GenericParams9PrintArgsE(ptr noundef nonnull align 8 dereferenceable(8) %108, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %114 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %113, ptr noundef @.str.5)
  %115 = load ptr, ptr %13, align 8, !tbaa !5
  %116 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %115, i32 0, i32 1
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %114, ptr noundef nonnull align 8 dereferenceable(8) %116)
  %118 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef @_ZSt3decRSt8ios_base)
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %118, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  br label %120

120:                                              ; preds = %105, %103
  br label %121

121:                                              ; preds = %120
  br label %122

122:                                              ; preds = %121
  %123 = load ptr, ptr %8, align 8, !tbaa !5
  %124 = load ptr, ptr %7, align 8, !tbaa !5
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %125, i32 0, i32 0
  %127 = load ptr, ptr %9, align 8, !tbaa !5
  %128 = load ptr, ptr %11, align 8, !tbaa !5
  %129 = load ptr, ptr %128, align 8, !tbaa !5
  %130 = getelementptr inbounds %"class.HIR::Function", ptr %129, i32 0, i32 7
  %131 = load ptr, ptr %12, align 8, !tbaa !5
  %132 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %131, i32 0, i32 2
  call void @_ZN9typecheck15fix_param_countERK4SpanR7ContextRKN3HIR7TypeRefEbRKNS5_4PathERKNS5_13GenericParamsERNS5_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(8) %123, ptr noundef nonnull align 8 dereferenceable(592) %124, ptr noundef nonnull align 8 dereferenceable(8) %126, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(88) %127, ptr noundef nonnull align 8 dereferenceable(96) %130, ptr noundef nonnull align 8 dereferenceable(24) %132)
  %133 = load ptr, ptr %11, align 8, !tbaa !5
  %134 = load ptr, ptr %133, align 8, !tbaa !5
  %135 = getelementptr inbounds %"class.HIR::Function", ptr %134, i32 0, i32 7
  %136 = load ptr, ptr %10, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.HIR::ExprCallCache", ptr %136, i32 0, i32 1
  store ptr %135, ptr %137, align 8, !tbaa !81
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  %138 = load ptr, ptr %12, align 8, !tbaa !5
  %139 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %138, i32 0, i32 3
  store ptr %139, ptr %25, align 8, !tbaa !5
  %140 = load ptr, ptr %25, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.HIR::PathParams", ptr %140, i32 0, i32 0
  %142 = load ptr, ptr %13, align 8, !tbaa !5
  %143 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %142, i32 0, i32 0
  %144 = getelementptr inbounds %"class.HIR::GenericParams", ptr %143, i32 0, i32 1
  %145 = call noundef i64 @_ZNKSt6vectorIN3HIR11LifetimeDefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %144) #10
  call void @_ZN10ThinVectorIN3HIR11LifetimeRefEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(8) %141, i64 noundef %145)
  %146 = load ptr, ptr %13, align 8, !tbaa !5
  %147 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %146, i32 0, i32 0
  %148 = call noundef zeroext i1 @_ZNK3HIR13GenericParams10is_genericEv(ptr noundef nonnull align 8 dereferenceable(96) %147)
  br i1 %148, label %149, label %325

149:                                              ; preds = %122
  %150 = load ptr, ptr %25, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.HIR::PathParams", ptr %150, i32 0, i32 1
  %152 = load ptr, ptr %13, align 8, !tbaa !5
  %153 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %152, i32 0, i32 0
  %154 = getelementptr inbounds %"class.HIR::GenericParams", ptr %153, i32 0, i32 0
  %155 = call noundef i64 @_ZNKSt6vectorIN3HIR12TypeParamDefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %154) #10
  call void @_ZN10ThinVectorIN3HIR7TypeRefEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(8) %151, i64 noundef %155)
  %156 = load ptr, ptr %25, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.HIR::PathParams", ptr %156, i32 0, i32 2
  %158 = load ptr, ptr %13, align 8, !tbaa !5
  %159 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %158, i32 0, i32 0
  %160 = getelementptr inbounds %"class.HIR::GenericParams", ptr %159, i32 0, i32 2
  %161 = call noundef i64 @_ZNKSt6vectorIN3HIR13ValueParamDefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %160) #10
  call void @_ZN10ThinVectorIN3HIR12ConstGenericEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(8) %157, i64 noundef %161)
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #10
  %162 = load ptr, ptr %25, align 8, !tbaa !5
  call void @_ZN9typecheck16OwnedImplMatcherC2ERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef nonnull align 8 dereferenceable(24) %162)
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  %163 = load ptr, ptr %13, align 8, !tbaa !5
  %164 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %163, i32 0, i32 1
  %165 = load ptr, ptr %8, align 8, !tbaa !5
  %166 = load ptr, ptr %12, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %166, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #10
  %168 = load ptr, ptr %7, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.Context, ptr %168, i32 0, i32 2
  call void @_ZNK16HMTypeInferrence22callback_resolve_inferEv(ptr dead_on_unwind writable sret(%"struct.HMTypeInferrence::ResolvePlaceholders") align 8 %28, ptr noundef nonnull align 8 dereferenceable(49) %169)
  %170 = call noundef i32 @_ZNK3HIR7TypeRef24match_test_generics_fuzzERK4SpanRKS0_RKNS_19ResolvePlaceholdersERNS_13MatchGenericsE(ptr noundef nonnull align 8 dereferenceable(8) %164, ptr noundef nonnull align 8 dereferenceable(8) %165, ptr noundef nonnull align 8 dereferenceable(8) %167, ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %26)
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  store i32 %170, ptr %27, align 4, !tbaa !93
  %171 = load i32, ptr %27, align 4, !tbaa !93
  %172 = icmp eq i32 %171, 1
  br i1 %172, label %173, label %263

173:                                              ; preds = %149
  br label %174

174:                                              ; preds = %173
  %175 = call noundef zeroext i1 @_Z13debug_enabledv()
  br i1 %175, label %176, label %182

176:                                              ; preds = %174
  %177 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %178 = call noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %177, ptr noundef @__FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE)
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %178, ptr noundef @.str.19)
  %180 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %179, ptr noundef @_ZSt3decRSt8ios_base)
  %181 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %180, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %182

182:                                              ; preds = %176, %174
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  %185 = load ptr, ptr %25, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.HIR::PathParams", ptr %185, i32 0, i32 1
  store ptr %186, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  %187 = load ptr, ptr %29, align 8, !tbaa !5
  %188 = call noundef ptr @_ZN10ThinVectorIN3HIR7TypeRefEE5beginEv(ptr noundef nonnull align 8 dereferenceable(8) %187)
  store ptr %188, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  %189 = load ptr, ptr %29, align 8, !tbaa !5
  %190 = call noundef ptr @_ZN10ThinVectorIN3HIR7TypeRefEE3endEv(ptr noundef nonnull align 8 dereferenceable(8) %189)
  store ptr %190, ptr %31, align 8, !tbaa !5
  br label %191

191:                                              ; preds = %216, %184
  %192 = load ptr, ptr %30, align 8, !tbaa !5
  %193 = load ptr, ptr %31, align 8, !tbaa !5
  %194 = icmp ne ptr %192, %193
  br i1 %194, label %196, label %195

195:                                              ; preds = %191
  store i32 8, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  br label %220

196:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  %197 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %197, ptr %32, align 8, !tbaa !5
  %198 = load ptr, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  call void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33)
  %199 = invoke noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %198, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %200 unwind label %207

200:                                              ; preds = %196
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br i1 %199, label %201, label %215

201:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.Context, ptr %202, i32 0, i32 2
  call void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %34, ptr noundef nonnull align 8 dereferenceable(49) %203, i32 noundef 0)
  %204 = load ptr, ptr %32, align 8, !tbaa !5
  %205 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %204, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %206 unwind label %211

206:                                              ; preds = %201
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %215

207:                                              ; preds = %196
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %18, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %19, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %219

211:                                              ; preds = %201
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %18, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %19, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %219

215:                                              ; preds = %206, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  br label %216

216:                                              ; preds = %215
  %217 = load ptr, ptr %30, align 8, !tbaa !5
  %218 = getelementptr inbounds %"class.HIR::TypeRef", ptr %217, i32 1
  store ptr %218, ptr %30, align 8, !tbaa !5
  br label %191

219:                                              ; preds = %211, %207
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  br label %324

220:                                              ; preds = %195
  %221 = load ptr, ptr %7, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.Context, ptr %221, i32 0, i32 2
  %223 = load ptr, ptr %25, align 8, !tbaa !5
  call void @_ZN16HMTypeInferrence16add_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %222, ptr noundef nonnull align 8 dereferenceable(24) %223)
  call void @llvm.lifetime.start.p0(i64 128, ptr %35) #10
  %224 = load ptr, ptr %12, align 8, !tbaa !5
  %225 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %224, i32 0, i32 0
  %226 = load ptr, ptr %25, align 8, !tbaa !5
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %35, ptr noundef %225, ptr noundef %226, ptr noundef null, ptr noundef null, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %227 = load ptr, ptr %8, align 8, !tbaa !5
  %228 = load ptr, ptr %13, align 8, !tbaa !5
  %229 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %228, i32 0, i32 1
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %36, ptr noundef nonnull align 8 dereferenceable(96) %35, ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef nonnull align 8 dereferenceable(8) %229, i1 noundef zeroext false)
          to label %230 unwind label %246

230:                                              ; preds = %220
  br label %231

231:                                              ; preds = %230
  %232 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %233 unwind label %250

233:                                              ; preds = %231
  br i1 %232, label %234, label %254

234:                                              ; preds = %233
  %235 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %236 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %235, ptr noundef @__FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE)
          to label %237 unwind label %250

237:                                              ; preds = %234
  %238 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %236, ptr noundef @.str.20)
          to label %239 unwind label %250

239:                                              ; preds = %237
  %240 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %238, ptr noundef nonnull align 8 dereferenceable(8) %36)
          to label %241 unwind label %250

241:                                              ; preds = %239
  %242 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %240, ptr noundef @_ZSt3decRSt8ios_base)
          to label %243 unwind label %250

243:                                              ; preds = %241
  %244 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %242, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %245 unwind label %250

245:                                              ; preds = %243
  br label %254

246:                                              ; preds = %220
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %18, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %19, align 4
  br label %262

250:                                              ; preds = %256, %243, %241, %239, %237, %234, %231
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %18, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %19, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  br label %262

254:                                              ; preds = %245, %233
  br label %255

255:                                              ; preds = %254
  br label %256

256:                                              ; preds = %255
  %257 = load ptr, ptr %7, align 8, !tbaa !5
  %258 = load ptr, ptr %8, align 8, !tbaa !5
  %259 = load ptr, ptr %12, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %259, i32 0, i32 0
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %257, ptr noundef nonnull align 8 dereferenceable(8) %258, ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %260)
          to label %261 unwind label %250

261:                                              ; preds = %256
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %35) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr %35) #10
  br label %287

262:                                              ; preds = %250, %246
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %35) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr %35) #10
  br label %324

263:                                              ; preds = %149
  %264 = load i32, ptr %27, align 4, !tbaa !93
  %265 = icmp eq i32 %264, 2
  br i1 %265, label %266, label %282

266:                                              ; preds = %263
  br label %267

267:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  %268 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %268)
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNSA_13ExprCallCacheERPKNSA_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(1) %39) #10
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef %38)
          to label %269 unwind label %272

269:                                              ; preds = %267
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  %270 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %270, ptr noundef @.str.7)
          to label %271 unwind label %276

271:                                              ; preds = %269
  call void @__cxa_throw(ptr %270, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #11
  unreachable

272:                                              ; preds = %267
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %18, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %19, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  br label %324

276:                                              ; preds = %269
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %18, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %19, align 4
  call void @__cxa_free_exception(ptr %270) #10
  br label %324

280:                                              ; No predecessors!
  br label %281

281:                                              ; preds = %280
  br label %286

282:                                              ; preds = %263
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.Context, ptr %283, i32 0, i32 2
  %285 = load ptr, ptr %25, align 8, !tbaa !5
  call void @_ZN16HMTypeInferrence16add_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %284, ptr noundef nonnull align 8 dereferenceable(24) %285)
  br label %286

286:                                              ; preds = %282, %281
  br label %287

287:                                              ; preds = %286, %261
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %288 = load ptr, ptr %25, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.HIR::PathParams", ptr %288, i32 0, i32 1
  store ptr %289, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %290 = load ptr, ptr %40, align 8, !tbaa !5
  %291 = call noundef ptr @_ZN10ThinVectorIN3HIR7TypeRefEE5beginEv(ptr noundef nonnull align 8 dereferenceable(8) %290)
  store ptr %291, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %292 = load ptr, ptr %40, align 8, !tbaa !5
  %293 = call noundef ptr @_ZN10ThinVectorIN3HIR7TypeRefEE3endEv(ptr noundef nonnull align 8 dereferenceable(8) %292)
  store ptr %293, ptr %42, align 8, !tbaa !5
  br label %294

294:                                              ; preds = %319, %287
  %295 = load ptr, ptr %41, align 8, !tbaa !5
  %296 = load ptr, ptr %42, align 8, !tbaa !5
  %297 = icmp ne ptr %295, %296
  br i1 %297, label %299, label %298

298:                                              ; preds = %294
  store i32 14, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %323

299:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #10
  %300 = load ptr, ptr %41, align 8, !tbaa !5
  store ptr %300, ptr %43, align 8, !tbaa !5
  %301 = load ptr, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  call void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44)
  %302 = invoke noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %301, ptr noundef nonnull align 8 dereferenceable(8) %44)
          to label %303 unwind label %310

303:                                              ; preds = %299
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br i1 %302, label %304, label %318

304:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  %305 = load ptr, ptr %7, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.Context, ptr %305, i32 0, i32 2
  call void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %45, ptr noundef nonnull align 8 dereferenceable(49) %306, i32 noundef 0)
  %307 = load ptr, ptr %43, align 8, !tbaa !5
  %308 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %307, ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %309 unwind label %314

309:                                              ; preds = %304
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  br label %318

310:                                              ; preds = %299
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %18, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %19, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %322

314:                                              ; preds = %304
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %18, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %19, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  br label %322

318:                                              ; preds = %309, %303
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  br label %319

319:                                              ; preds = %318
  %320 = load ptr, ptr %41, align 8, !tbaa !5
  %321 = getelementptr inbounds %"class.HIR::TypeRef", ptr %320, i32 1
  store ptr %321, ptr %41, align 8, !tbaa !5
  br label %294

322:                                              ; preds = %314, %310
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %324

323:                                              ; preds = %298
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #10
  br label %325

324:                                              ; preds = %322, %276, %272, %262, %219
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #10
  br label %366

325:                                              ; preds = %323, %122
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %326 = load ptr, ptr %12, align 8, !tbaa !5
  %327 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %326, i32 0, i32 2
  store ptr %327, ptr %46, align 8, !tbaa !5
  %328 = load ptr, ptr %10, align 8, !tbaa !5
  %329 = getelementptr inbounds %"struct.HIR::ExprCallCache", ptr %328, i32 0, i32 4
  %330 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 128) #13
  %331 = load ptr, ptr %12, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %331, i32 0, i32 0
  %333 = load ptr, ptr %25, align 8, !tbaa !5
  %334 = load ptr, ptr %46, align 8, !tbaa !5
  invoke void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %330, ptr noundef %332, ptr noundef %333, ptr noundef %334, ptr noundef null, ptr noundef null)
          to label %335 unwind label %357

335:                                              ; preds = %325
  call void @_ZNSt10unique_ptrI13MonomorphiserSt14default_deleteIS0_EE5resetEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %329, ptr noundef %330) #10
  %336 = load ptr, ptr %7, align 8, !tbaa !5
  %337 = load ptr, ptr %8, align 8, !tbaa !5
  %338 = load ptr, ptr %13, align 8, !tbaa !5
  %339 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %338, i32 0, i32 0
  %340 = load ptr, ptr %10, align 8, !tbaa !5
  %341 = getelementptr inbounds %"struct.HIR::ExprCallCache", ptr %340, i32 0, i32 4
  %342 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNKSt10unique_ptrI13MonomorphiserSt14default_deleteIS0_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %341) #10
  call void @_ZN9typecheck21apply_bounds_as_rulesER7ContextRK4SpanRKN3HIR13GenericParamsERK13Monomorphiserb(ptr noundef nonnull align 8 dereferenceable(592) %336, ptr noundef nonnull align 8 dereferenceable(8) %337, ptr noundef nonnull align 8 dereferenceable(96) %339, ptr noundef nonnull align 8 dereferenceable(96) %342, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #10
  call void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %47)
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  %343 = load ptr, ptr %10, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.HIR::ExprCallCache", ptr %343, i32 0, i32 4
  %345 = call noundef ptr @_ZNKSt10unique_ptrI13MonomorphiserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %344) #10
  %346 = load ptr, ptr %8, align 8, !tbaa !5
  %347 = load ptr, ptr %13, align 8, !tbaa !5
  %348 = getelementptr inbounds %"class.HIR::TypeImpl", ptr %347, i32 0, i32 1
  %349 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK13Monomorphiser20maybe_monomorph_typeERK4SpanRN3HIR7TypeRefERKS4_b(ptr noundef nonnull align 8 dereferenceable(96) %345, ptr noundef nonnull align 8 dereferenceable(8) %346, ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef nonnull align 8 dereferenceable(8) %348, i1 noundef zeroext true)
          to label %350 unwind label %361

350:                                              ; preds = %335
  store ptr %349, ptr %48, align 8, !tbaa !5
  %351 = load ptr, ptr %7, align 8, !tbaa !5
  %352 = load ptr, ptr %8, align 8, !tbaa !5
  %353 = load ptr, ptr %12, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %353, i32 0, i32 0
  %355 = load ptr, ptr %48, align 8, !tbaa !5
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %351, ptr noundef nonnull align 8 dereferenceable(8) %352, ptr noundef nonnull align 8 dereferenceable(8) %354, ptr noundef nonnull align 8 dereferenceable(8) %355)
          to label %356 unwind label %361

356:                                              ; preds = %350
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  store i1 true, ptr %6, align 1
  store i32 1, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  br label %367

357:                                              ; preds = %325
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %18, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %19, align 4
  call void @_ZdlPvm(ptr noundef %330, i64 noundef 128) #14
  br label %365

361:                                              ; preds = %350, %335
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %18, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  br label %365

365:                                              ; preds = %361, %357
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  br label %366

366:                                              ; preds = %365, %324
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  br label %369

367:                                              ; preds = %356, %95
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  %368 = load i1, ptr %6, align 1
  ret i1 %368

369:                                              ; preds = %366, %86, %82, %78
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  br label %370

370:                                              ; preds = %369
  %371 = load ptr, ptr %18, align 8
  %372 = load i32, ptr %19, align 4
  %373 = insertvalue { ptr, i32 } poison, ptr %371, 0
  %374 = insertvalue { ptr, i32 } %373, i32 %372, 1
  resume { ptr, i32 } %374
}

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

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

declare noundef zeroext i1 @_ZNK3HIR5Crate15find_type_implsERKNS_7TypeRefERKNS_19ResolvePlaceholdersESt8functionIFbRKNS_8TypeImplEEE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK16HMTypeInferrence22callback_resolve_inferEv(ptr dead_on_unwind noalias writable sret(%"struct.HMTypeInferrence::ResolvePlaceholders") align 8, ptr noundef nonnull align 8 dereferenceable(49)) #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR13GenericParams10is_genericEv(ptr noundef nonnull align 8 dereferenceable(96)) #1 align 2

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

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

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

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

declare noundef i32 @_ZNK3HIR7TypeRef24match_test_generics_fuzzERK4SpanRKS0_RKNS_19ResolvePlaceholdersERNS_13MatchGenericsE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

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

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

declare noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

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

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

declare void @_ZN16HMTypeInferrence16add_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(24)) #2

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"_ZTS7Context", !6, i64 0, !13, i64 8, !17, i64 32, !27, i64 88, !10, i64 368, !50, i64 376, !54, i64 400, !58, i64 424, !62, i64 448, !66, i64 472, !72, i64 512, !76, i64 536, !44, i64 584}
!13 = !{!"_ZTSSt6vectorIN7Context7BindingESaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIN7Context7BindingESaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIN7Context7BindingESaIS1_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIN7Context7BindingESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"_ZTS16HMTypeInferrence", !18, i64 0, !22, i64 24, !26, i64 48}
!18 = !{!"_ZTSSt6vectorIN16HMTypeInferrence4IVarESaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!"_ZTSSt6vectorIN16HMTypeInferrence9IVarValueESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"_ZTS15TraitResolution", !28, i64 0, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !46, i64 256}
!28 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !29, i64 24, !38, i64 72, !44, i64 104, !44, i64 112, !44, i64 120, !44, i64 128, !44, i64 136, !44, i64 144, !44, i64 152, !44, i64 160, !44, i64 168, !44, i64 176, !44, i64 184, !44, i64 192, !44, i64 200, !44, i64 208}
!29 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !30, i64 0}
!30 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !31, i64 0}
!31 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !32, i64 0, !34, i64 8}
!32 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !33, i64 0}
!33 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!34 = !{!"_ZTSSt15_Rb_tree_header", !35, i64 0, !37, i64 32}
!35 = !{!"_ZTSSt18_Rb_tree_node_base", !36, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!36 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!37 = !{!"long", !7, i64 0}
!38 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !39, i64 0, !43, i64 24}
!39 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!44 = !{!"_ZTSN3HIR10SimplePathE", !45, i64 0}
!45 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!46 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!50 = !{!"_ZTSSt6vectorISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE", !51, i64 0}
!51 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!54 = !{!"_ZTSSt6vectorIN7Context10AssociatedESaIS1_EE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseIN7Context10AssociatedESaIS1_EE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIN7Context10AssociatedESaIS1_EE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIN7Context10AssociatedESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!58 = !{!"_ZTSSt6vectorIPN3HIR8ExprNodeESaIS2_EE", !59, i64 0}
!59 = !{!"_ZTSSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE12_Vector_implE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!62 = !{!"_ZTSSt6vectorISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE", !63, i64 0}
!63 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!66 = !{!"_ZTSSt6vectorIbSaIbEE", !67, i64 0}
!67 = !{!"_ZTSSt13_Bvector_baseISaIbEE", !68, i64 0}
!68 = !{!"_ZTSNSt13_Bvector_baseISaIbEE13_Bvector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt13_Bvector_baseISaIbEE18_Bvector_impl_dataE", !70, i64 0, !70, i64 16, !6, i64 32}
!70 = !{!"_ZTSSt13_Bit_iterator", !71, i64 0}
!71 = !{!"_ZTSSt18_Bit_iterator_base", !6, i64 0, !10, i64 8}
!72 = !{!"_ZTSSt6vectorIN7Context12IVarPossibleESaIS1_EE", !73, i64 0}
!73 = !{!"_ZTSSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE12_Vector_implE", !75, i64 0}
!75 = !{!"_ZTSNSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!76 = !{!"_ZTSSt3mapIPN3HIR30TypeData_ErasedType_AliasInnerEN7Context9TaitEntryESt4lessIS2_ESaISt4pairIKS2_S4_EEE", !77, i64 0}
!77 = !{!"_ZTSSt8_Rb_treeIPN3HIR30TypeData_ErasedType_AliasInnerESt4pairIKS2_N7Context9TaitEntryEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE", !78, i64 0}
!78 = !{!"_ZTSNSt8_Rb_treeIPN3HIR30TypeData_ErasedType_AliasInnerESt4pairIKS2_N7Context9TaitEntryEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE13_Rb_tree_implISB_Lb1EEE", !79, i64 0, !34, i64 8}
!79 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIPN3HIR30TypeData_ErasedType_AliasInnerEEE", !80, i64 0}
!80 = !{!"_ZTSSt4lessIPN3HIR30TypeData_ErasedType_AliasInnerEE"}
!81 = !{!82, !6, i64 24}
!82 = !{!"_ZTSN3HIR13ExprCallCacheE", !83, i64 0, !6, i64 24, !6, i64 32, !6, i64 40, !87, i64 48}
!83 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !84, i64 0}
!84 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !85, i64 0}
!85 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !86, i64 0}
!86 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!87 = !{!"_ZTSSt10unique_ptrI13MonomorphiserSt14default_deleteIS0_EE", !88, i64 0}
!88 = !{!"_ZTSSt15__uniq_ptr_dataI13MonomorphiserSt14default_deleteIS0_ELb1ELb1EE", !89, i64 0}
!89 = !{!"_ZTSSt15__uniq_ptr_implI13MonomorphiserSt14default_deleteIS0_EE", !90, i64 0}
!90 = !{!"_ZTSSt5tupleIJP13MonomorphiserSt14default_deleteIS0_EEE", !91, i64 0}
!91 = !{!"_ZTSSt11_Tuple_implILm0EJP13MonomorphiserSt14default_deleteIS0_EEE", !92, i64 0}
!92 = !{!"_ZTSSt10_Head_baseILm0EP13MonomorphiserLb0EE", !6, i64 0}
!93 = !{!94, !94, i64 0}
!94 = !{!"_ZTSN3HIR7CompareE", !7, i64 0}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.HIR::TypeRef" = type { ptr }
%"struct.HMTypeInferrence::ResolvePlaceholders" = type { %"class.HIR::ResolvePlaceholders", ptr }
%"class.HIR::ResolvePlaceholders" = type { ptr }
%"class.std::function.426" = 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.429 = type { ptr, ptr, ptr, ptr }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%class.anon.430 = type { ptr }
%"struct.HIR::GenericParams::PrintArgs" = type { ptr }
%"class.typecheck::OwnedImplMatcher" = type { %"class.HIR::MatchGenerics", ptr }
%"class.HIR::MatchGenerics" = type { ptr }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.122" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.122" = type { %"struct.std::_Vector_base.123" }
%"struct.std::_Vector_base.123" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.441 = type { i8 }

@g_debug_indent_level = external local_unnamed_addr global i32, align 4
@.str.3 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.16 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@__PRETTY_FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE = external hidden unnamed_addr constant [145 x i8], align 1
@__FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE = external hidden unnamed_addr constant [39 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [18 x i8], align 1

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

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

declare noundef zeroext i1 @_Z13debug_enabledv() local_unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9typecheck15fix_param_countERK4SpanR7ContextRKN3HIR7TypeRefEbRKNS5_4PathERKNS5_13GenericParamsERNS5_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9typecheck21apply_bounds_as_rulesER7ContextRK4SpanRKN3HIR13GenericParamsERK13Monomorphiserb(ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), i1 noundef zeroext) local_unnamed_addr #4

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #8

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(64) ptr @_ZN3HIR4Path4Data15as_UfcsInherentEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 8 dereferenceable(56) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) local_unnamed_addr #4 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %"struct.HMTypeInferrence::ResolvePlaceholders", align 8
  %9 = alloca %"class.std::function.426", align 8
  %10 = alloca %class.anon.429, align 8
  %11 = alloca %struct.Span, align 8
  %12 = alloca %"class.std::function", align 8
  %13 = alloca %class.anon.430, align 8
  %14 = alloca %"struct.HIR::GenericParams::PrintArgs", align 8
  %15 = alloca %"class.typecheck::OwnedImplMatcher", align 8
  %16 = alloca %"struct.HMTypeInferrence::ResolvePlaceholders", align 8
  %17 = alloca %"class.HIR::TypeRef", align 8
  %18 = alloca %"class.HIR::TypeRef", align 8
  %19 = alloca %struct.MonomorphStatePtr, align 8
  %20 = alloca %"class.HIR::TypeRef", align 8
  %21 = alloca %struct.Span, align 8
  %22 = alloca %"class.std::function", align 8
  %23 = alloca %class.anon.441, align 1
  %24 = alloca %"class.HIR::TypeRef", align 8
  %25 = alloca %"class.HIR::TypeRef", align 8
  %26 = alloca %"class.HIR::TypeRef", align 8
  %27 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZN3HIR4Path4Data15as_UfcsInherentEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  store ptr null, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #10
  store i32 0, ptr %7, align 4, !tbaa !9
  %28 = load ptr, ptr %0, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #10
  %29 = getelementptr inbounds i8, ptr %0, i64 32
  call void @_ZNK16HMTypeInferrence22callback_resolve_inferEv(ptr dead_on_unwind nonnull writable sret(%"struct.HMTypeInferrence::ResolvePlaceholders") align 8 %8, ptr noundef nonnull align 8 dereferenceable(49) %29)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #10
  store ptr %27, ptr %10, align 8, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %10, i64 8
  store ptr %4, ptr %30, align 8, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %10, i64 16
  store ptr %6, ptr %31, align 8, !tbaa !5
  %32 = getelementptr inbounds i8, ptr %10, i64 24
  store ptr %7, ptr %32, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3HIR8TypeImplEEEC2IZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRNS0_4PathERNS0_13ExprCallCacheERPKNS0_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(32) %10)
  %33 = invoke noundef zeroext i1 @_ZNK3HIR5Crate15find_type_implsERKNS_7TypeRefERKNS_19ResolvePlaceholdersESt8functionIFbRKNS_8TypeImplEEE(ptr noundef nonnull align 8 dereferenceable(944) %28, ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull %9)
          to label %34 unwind label %40

34:                                               ; preds = %5
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #10
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %.not = icmp eq ptr %35, null
  br i1 %.not, label %36, label %46

36:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #10
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #10
  store ptr %2, ptr %13, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNSA_13ExprCallCacheERPKNSA_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0, ptr noundef nonnull %12)
          to label %37 unwind label %42

37:                                               ; preds = %36
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  %38 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull @.str.16)
          to label %39 unwind label %44

39:                                               ; preds = %37
  call void @__cxa_throw(ptr nonnull %38, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #11
  unreachable

40:                                               ; preds = %5
  %41 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #10
  br label %171

42:                                               ; preds = %36
  %43 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  br label %171

44:                                               ; preds = %37
  %45 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %38) #10
  br label %171

46:                                               ; preds = %34
  %47 = load i32, ptr %7, align 4, !tbaa !9
  %48 = icmp ult i32 %47, 2
  br i1 %48, label %49, label %170

49:                                               ; preds = %46
  %50 = load ptr, ptr %6, align 8, !tbaa !5
  %.not83 = icmp eq ptr %50, null
  br i1 %.not83, label %51, label %52

51:                                               ; preds = %49
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.3, i32 noundef 406, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE) #12
  unreachable

52:                                               ; preds = %49
  %53 = call noundef zeroext i1 @_Z13debug_enabledv()
  br i1 %53, label %54, label %67

54:                                               ; preds = %52
  %55 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %56 = call noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %55, ptr noundef nonnull @__FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE)
  %57 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull @.str.18)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = call ptr @_ZNK3HIR13GenericParams8fmt_argsEv(ptr noundef nonnull align 8 dereferenceable(96) %58)
  store ptr %59, ptr %14, align 8
  %60 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_13GenericParams9PrintArgsE(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %14)
  %61 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef nonnull @.str.5)
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds i8, ptr %62, i64 96
  %64 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %61, ptr noundef nonnull align 8 dereferenceable(8) %63)
  %65 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull @_ZSt3decRSt8ios_base)
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  br label %67

67:                                               ; preds = %54, %52
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %68, i64 112
  %70 = getelementptr inbounds i8, ptr %27, i64 16
  call void @_ZN9typecheck15fix_param_countERK4SpanR7ContextRKN3HIR7TypeRefEbRKNS5_4PathERKNS5_13GenericParamsERNS5_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %27, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 8 dereferenceable(96) %69, ptr noundef nonnull align 8 dereferenceable(24) %70)
  %71 = load ptr, ptr %4, align 8, !tbaa !5
  %72 = getelementptr inbounds i8, ptr %71, i64 112
  %73 = getelementptr inbounds i8, ptr %3, i64 24
  store ptr %72, ptr %73, align 8, !tbaa !81
  %74 = getelementptr inbounds i8, ptr %27, i64 40
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %75, i64 24
  %77 = call noundef i64 @_ZNKSt6vectorIN3HIR11LifetimeDefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  call void @_ZN10ThinVectorIN3HIR11LifetimeRefEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(8) %74, i64 noundef %77)
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = call noundef zeroext i1 @_ZNK3HIR13GenericParams10is_genericEv(ptr noundef nonnull align 8 dereferenceable(96) %78)
  br i1 %79, label %80, label %154

80:                                               ; preds = %67
  %81 = getelementptr inbounds i8, ptr %27, i64 48
  %82 = load ptr, ptr %6, align 8, !tbaa !5
  %83 = call noundef i64 @_ZNKSt6vectorIN3HIR12TypeParamDefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %82) #10
  call void @_ZN10ThinVectorIN3HIR7TypeRefEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(8) %81, i64 noundef %83)
  %84 = getelementptr inbounds i8, ptr %27, i64 56
  %85 = load ptr, ptr %6, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i64 48
  %87 = call noundef i64 @_ZNKSt6vectorIN3HIR13ValueParamDefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %86) #10
  call void @_ZN10ThinVectorIN3HIR12ConstGenericEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(8) %84, i64 noundef %87)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #10
  call void @_ZN9typecheck16OwnedImplMatcherC2ERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(24) %74)
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = getelementptr inbounds i8, ptr %88, i64 96
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #10
  call void @_ZNK16HMTypeInferrence22callback_resolve_inferEv(ptr dead_on_unwind nonnull writable sret(%"struct.HMTypeInferrence::ResolvePlaceholders") align 8 %16, ptr noundef nonnull align 8 dereferenceable(49) %29)
  %90 = call noundef i32 @_ZNK3HIR7TypeRef24match_test_generics_fuzzERK4SpanRKS0_RKNS_19ResolvePlaceholdersERNS_13MatchGenericsE(ptr noundef nonnull align 8 dereferenceable(8) %89, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %15)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #10
  switch i32 %90, label %141 [
    i32 1, label %91
    i32 2, label %133
  ]

91:                                               ; preds = %80
  %92 = call noundef zeroext i1 @_Z13debug_enabledv()
  br i1 %92, label %93, label %99

93:                                               ; preds = %91
  %94 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %95 = call noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %94, ptr noundef nonnull @__FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE)
  %96 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %95, ptr noundef nonnull @.str.19)
  %97 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef nonnull @_ZSt3decRSt8ios_base)
  %98 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %99

99:                                               ; preds = %93, %91
  %100 = call noundef ptr @_ZN10ThinVectorIN3HIR7TypeRefEE5beginEv(ptr noundef nonnull align 8 dereferenceable(8) %81)
  %101 = call noundef ptr @_ZN10ThinVectorIN3HIR7TypeRefEE3endEv(ptr noundef nonnull align 8 dereferenceable(8) %81)
  %.not8493 = icmp eq ptr %100, %101
  br i1 %.not8493, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %110, %99
  call void @_ZN16HMTypeInferrence16add_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %29, ptr noundef nonnull align 8 dereferenceable(24) %74)
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %19) #10
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %19, ptr noundef nonnull %27, ptr noundef nonnull %74, ptr noundef null, ptr noundef null, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #10
  %102 = load ptr, ptr %6, align 8, !tbaa !5
  %103 = getelementptr inbounds i8, ptr %102, i64 96
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %20, ptr noundef nonnull align 8 dereferenceable(96) %19, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %103, i1 noundef zeroext false)
          to label %112 unwind label %126

.lr.ph:                                           ; preds = %99, %110
  %.08194 = phi ptr [ %111, %110 ], [ %100, %99 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #10
  call void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %104 = invoke noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %.08194, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %105 unwind label %108

105:                                              ; preds = %.lr.ph
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  br i1 %104, label %106, label %110

106:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #10
  call void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %18, ptr noundef nonnull align 8 dereferenceable(49) %29, i32 noundef 0)
  %107 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %.08194, ptr noundef nonnull align 8 dereferenceable(8) %18)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  br label %110

108:                                              ; preds = %.lr.ph
  %109 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  br label %153

110:                                              ; preds = %106, %105
  %111 = getelementptr inbounds i8, ptr %.08194, i64 8
  %.not84 = icmp eq ptr %111, %101
  br i1 %.not84, label %._crit_edge, label %.lr.ph

112:                                              ; preds = %._crit_edge
  %113 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %114 unwind label %128

114:                                              ; preds = %112
  br i1 %113, label %115, label %130

115:                                              ; preds = %114
  %116 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %116, ptr noundef nonnull @__FUNCTION__._ZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNS5_13ExprCallCacheERPKNS5_8FunctionE)
          to label %118 unwind label %128

118:                                              ; preds = %115
  %119 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef nonnull @.str.20)
          to label %120 unwind label %128

120:                                              ; preds = %118
  %121 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %119, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %122 unwind label %128

122:                                              ; preds = %120
  %123 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %121, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %124 unwind label %128

124:                                              ; preds = %122
  %125 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %123, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %130 unwind label %128

126:                                              ; preds = %._crit_edge
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %132

128:                                              ; preds = %130, %124, %122, %120, %118, %115, %112
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  br label %132

130:                                              ; preds = %124, %114
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %131 unwind label %128

131:                                              ; preds = %130
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %19) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %19) #10
  br label %142

132:                                              ; preds = %128, %126
  %.pn = phi { ptr, i32 } [ %129, %128 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %19) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %19) #10
  br label %153

133:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #10
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZN9typecheck38visit_call_populate_cache_UfcsInherentER7ContextRK4SpanRN3HIR4PathERNSA_13ExprCallCacheERPKNSA_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(1) %23) #10
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull %22)
          to label %134 unwind label %137

134:                                              ; preds = %133
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  %135 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %135, ptr noundef nonnull @.str.7)
          to label %136 unwind label %139

136:                                              ; preds = %134
  call void @__cxa_throw(ptr nonnull %135, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #11
  unreachable

137:                                              ; preds = %133
  %138 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  br label %153

139:                                              ; preds = %134
  %140 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %135) #10
  br label %153

141:                                              ; preds = %80
  call void @_ZN16HMTypeInferrence16add_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %29, ptr noundef nonnull align 8 dereferenceable(24) %74)
  br label %142

142:                                              ; preds = %141, %131
  %143 = call noundef ptr @_ZN10ThinVectorIN3HIR7TypeRefEE5beginEv(ptr noundef nonnull align 8 dereferenceable(8) %81)
  %144 = call noundef ptr @_ZN10ThinVectorIN3HIR7TypeRefEE3endEv(ptr noundef nonnull align 8 dereferenceable(8) %81)
  %.not8695 = icmp eq ptr %143, %144
  br i1 %.not8695, label %._crit_edge99, label %.lr.ph98

._crit_edge99:                                    ; preds = %151, %142
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #10
  br label %154

.lr.ph98:                                         ; preds = %142, %151
  %.08096 = phi ptr [ %152, %151 ], [ %143, %142 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #10
  call void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24)
  %145 = invoke noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %.08096, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %146 unwind label %149

146:                                              ; preds = %.lr.ph98
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #10
  br i1 %145, label %147, label %151

147:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #10
  call void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %25, ptr noundef nonnull align 8 dereferenceable(49) %29, i32 noundef 0)
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %.08096, ptr noundef nonnull align 8 dereferenceable(8) %25)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %151

149:                                              ; preds = %.lr.ph98
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #10
  br label %153

151:                                              ; preds = %147, %146
  %152 = getelementptr inbounds i8, ptr %.08096, i64 8
  %.not86 = icmp eq ptr %152, %144
  br i1 %.not86, label %._crit_edge99, label %.lr.ph98

153:                                              ; preds = %149, %139, %137, %132, %108
  %.pn89 = phi { ptr, i32 } [ %109, %108 ], [ %150, %149 ], [ %.pn, %132 ], [ %140, %139 ], [ %138, %137 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #10
  br label %171

154:                                              ; preds = %._crit_edge99, %67
  %155 = call noalias noundef nonnull dereferenceable(128) ptr @_Znwm(i64 noundef 128) #13
  invoke void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %155, ptr noundef nonnull %27, ptr noundef nonnull %74, ptr noundef nonnull %70, ptr noundef null, ptr noundef null)
          to label %156 unwind label %166

156:                                              ; preds = %154
  %157 = getelementptr inbounds i8, ptr %3, i64 48
  call void @_ZNSt10unique_ptrI13MonomorphiserSt14default_deleteIS0_EE5resetEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %157, ptr noundef nonnull %155) #10
  %158 = load ptr, ptr %6, align 8, !tbaa !5
  %159 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNKSt10unique_ptrI13MonomorphiserSt14default_deleteIS0_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %157) #10
  call void @_ZN9typecheck21apply_bounds_as_rulesER7ContextRK4SpanRKN3HIR13GenericParamsERK13Monomorphiserb(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(96) %158, ptr noundef nonnull align 8 dereferenceable(96) %159, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  call void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26)
  %160 = call noundef ptr @_ZNKSt10unique_ptrI13MonomorphiserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %157) #10
  %161 = load ptr, ptr %6, align 8, !tbaa !5
  %162 = getelementptr inbounds i8, ptr %161, i64 96
  %163 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK13Monomorphiser20maybe_monomorph_typeERK4SpanRN3HIR7TypeRefERKS4_b(ptr noundef nonnull align 8 dereferenceable(96) %160, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %162, i1 noundef zeroext true)
          to label %164 unwind label %168

164:                                              ; preds = %156
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %163)
          to label %165 unwind label %168

165:                                              ; preds = %164
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  br label %170

166:                                              ; preds = %154
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %155, i64 noundef 128) #14
  br label %171

168:                                              ; preds = %164, %156
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  br label %171

170:                                              ; preds = %46, %165
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  ret i1 %48

171:                                              ; preds = %153, %168, %166, %44, %42, %40
  %.pn89.pn.pn = phi { ptr, i32 } [ %45, %44 ], [ %43, %42 ], [ %41, %40 ], [ %.pn89, %153 ], [ %169, %168 ], [ %167, %166 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  resume { ptr, i32 } %.pn89.pn.pn
}

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

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

declare noundef zeroext i1 @_ZNK3HIR5Crate15find_type_implsERKNS_7TypeRefERKNS_19ResolvePlaceholdersESt8functionIFbRKNS_8TypeImplEEE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK16HMTypeInferrence22callback_resolve_inferEv(ptr dead_on_unwind noalias writable sret(%"struct.HMTypeInferrence::ResolvePlaceholders") align 8, ptr noundef nonnull align 8 dereferenceable(49)) local_unnamed_addr #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR13GenericParams10is_genericEv(ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #1 align 2

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

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

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

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

declare noundef i32 @_ZNK3HIR7TypeRef24match_test_generics_fuzzERK4SpanRKS0_RKNS_19ResolvePlaceholdersERNS_13MatchGenericsE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

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

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

declare noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

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

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

declare void @_ZN16HMTypeInferrence16add_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"_ZTS7Context", !6, i64 0, !13, i64 8, !17, i64 32, !27, i64 88, !10, i64 368, !50, i64 376, !54, i64 400, !58, i64 424, !62, i64 448, !66, i64 472, !72, i64 512, !76, i64 536, !44, i64 584}
!13 = !{!"_ZTSSt6vectorIN7Context7BindingESaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIN7Context7BindingESaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIN7Context7BindingESaIS1_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIN7Context7BindingESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"_ZTS16HMTypeInferrence", !18, i64 0, !22, i64 24, !26, i64 48}
!18 = !{!"_ZTSSt6vectorIN16HMTypeInferrence4IVarESaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!"_ZTSSt6vectorIN16HMTypeInferrence9IVarValueESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"_ZTS15TraitResolution", !28, i64 0, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !46, i64 256}
!28 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !29, i64 24, !38, i64 72, !44, i64 104, !44, i64 112, !44, i64 120, !44, i64 128, !44, i64 136, !44, i64 144, !44, i64 152, !44, i64 160, !44, i64 168, !44, i64 176, !44, i64 184, !44, i64 192, !44, i64 200, !44, i64 208}
!29 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !30, i64 0}
!30 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !31, i64 0}
!31 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !32, i64 0, !34, i64 8}
!32 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !33, i64 0}
!33 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!34 = !{!"_ZTSSt15_Rb_tree_header", !35, i64 0, !37, i64 32}
!35 = !{!"_ZTSSt18_Rb_tree_node_base", !36, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!36 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!37 = !{!"long", !7, i64 0}
!38 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !39, i64 0, !43, i64 24}
!39 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!44 = !{!"_ZTSN3HIR10SimplePathE", !45, i64 0}
!45 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!46 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!50 = !{!"_ZTSSt6vectorISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE", !51, i64 0}
!51 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!54 = !{!"_ZTSSt6vectorIN7Context10AssociatedESaIS1_EE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseIN7Context10AssociatedESaIS1_EE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIN7Context10AssociatedESaIS1_EE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIN7Context10AssociatedESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!58 = !{!"_ZTSSt6vectorIPN3HIR8ExprNodeESaIS2_EE", !59, i64 0}
!59 = !{!"_ZTSSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE12_Vector_implE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!62 = !{!"_ZTSSt6vectorISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE", !63, i64 0}
!63 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!66 = !{!"_ZTSSt6vectorIbSaIbEE", !67, i64 0}
!67 = !{!"_ZTSSt13_Bvector_baseISaIbEE", !68, i64 0}
!68 = !{!"_ZTSNSt13_Bvector_baseISaIbEE13_Bvector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt13_Bvector_baseISaIbEE18_Bvector_impl_dataE", !70, i64 0, !70, i64 16, !6, i64 32}
!70 = !{!"_ZTSSt13_Bit_iterator", !71, i64 0}
!71 = !{!"_ZTSSt18_Bit_iterator_base", !6, i64 0, !10, i64 8}
!72 = !{!"_ZTSSt6vectorIN7Context12IVarPossibleESaIS1_EE", !73, i64 0}
!73 = !{!"_ZTSSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE12_Vector_implE", !75, i64 0}
!75 = !{!"_ZTSNSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!76 = !{!"_ZTSSt3mapIPN3HIR30TypeData_ErasedType_AliasInnerEN7Context9TaitEntryESt4lessIS2_ESaISt4pairIKS2_S4_EEE", !77, i64 0}
!77 = !{!"_ZTSSt8_Rb_treeIPN3HIR30TypeData_ErasedType_AliasInnerESt4pairIKS2_N7Context9TaitEntryEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE", !78, i64 0}
!78 = !{!"_ZTSNSt8_Rb_treeIPN3HIR30TypeData_ErasedType_AliasInnerESt4pairIKS2_N7Context9TaitEntryEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE13_Rb_tree_implISB_Lb1EEE", !79, i64 0, !34, i64 8}
!79 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIPN3HIR30TypeData_ErasedType_AliasInnerEEE", !80, i64 0}
!80 = !{!"_ZTSSt4lessIPN3HIR30TypeData_ErasedType_AliasInnerEE"}
!81 = !{!82, !6, i64 24}
!82 = !{!"_ZTSN3HIR13ExprCallCacheE", !83, i64 0, !6, i64 24, !6, i64 32, !6, i64 40, !87, i64 48}
!83 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !84, i64 0}
!84 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !85, i64 0}
!85 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !86, i64 0}
!86 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!87 = !{!"_ZTSSt10unique_ptrI13MonomorphiserSt14default_deleteIS0_EE", !88, i64 0}
!88 = !{!"_ZTSSt15__uniq_ptr_dataI13MonomorphiserSt14default_deleteIS0_ELb1ELb1EE", !89, i64 0}
!89 = !{!"_ZTSSt15__uniq_ptr_implI13MonomorphiserSt14default_deleteIS0_EE", !90, i64 0}
!90 = !{!"_ZTSSt5tupleIJP13MonomorphiserSt14default_deleteIS0_EEE", !91, i64 0}
!91 = !{!"_ZTSSt11_Tuple_implILm0EJP13MonomorphiserSt14default_deleteIS0_EEE", !92, i64 0}
!92 = !{!"_ZTSSt10_Head_baseILm0EP13MonomorphiserLb0EE", !6, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass