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

; 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"

%"struct.HMTypeInferrence::ResolvePlaceholders" = type { %"class.HIR::ResolvePlaceholders", ptr }
%"class.HIR::ResolvePlaceholders" = type { ptr }
%"class.std::function.521" = 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.655 = type { i8 }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%class.anon.657 = type { ptr }
%struct.GetSelf = type { %"class.HIR::MatchGenerics", ptr }
%"class.HIR::MatchGenerics" = type { ptr }
%class.anon.658 = type { ptr, ptr }
%"class.HIR::Function" = type { i8, %"struct.HIR::Linkage", i32, %"class.HIR::TypeRef", %class.RcString, i8, i8, %"class.HIR::GenericParams", %"class.std::vector.93", 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.143 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.143 = type { i64, [8 x i8] }
%class.RcString = type { ptr }
%"class.HIR::GenericParams" = type { %"class.std::vector.65", %"class.std::vector.70", %"class.std::vector.75", %"class.std::vector.80" }
%"class.std::vector.65" = type { %"struct.std::_Vector_base.66" }
%"struct.std::_Vector_base.66" = 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.70" = type { %"struct.std::_Vector_base.71" }
%"struct.std::_Vector_base.71" = 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.75" = type { %"struct.std::_Vector_base.76" }
%"struct.std::_Vector_base.76" = 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.80" = type { %"struct.std::_Vector_base.81" }
%"struct.std::_Vector_base.81" = 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::vector.93" = type { %"struct.std::_Vector_base.94" }
%"struct.std::_Vector_base.94" = 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::TypeRef" = type { ptr }
%"class.HIR::ExprPtr" = type { %"class.HIR::ExprPtrInner", %"class.std::vector.60", %"class.std::vector.60", %"class.MIR::FunctionPointer", %"class.HIR::ExprStatePtr" }
%"class.HIR::ExprPtrInner" = type { ptr }
%"class.std::vector.60" = type { %"struct.std::_Vector_base.61" }
%"struct.std::_Vector_base.61" = 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.85", i8, i32 }
%"class.std::vector.85" = type { %"struct.std::_Vector_base.86" }
%"struct.std::_Vector_base.86" = 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 }
%class.TraitResolution = type { %struct.TraitResolveCommon, ptr, ptr, ptr, ptr, ptr, %"class.std::vector.216" }
%struct.TraitResolveCommon = type { ptr, ptr, ptr, %"class.std::map.205", %class.RangeVecMap, %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath" }
%"class.std::map.205" = type { %"class.std::_Rb_tree.206" }
%"class.std::_Rb_tree.206" = type { %"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>, std::_Select1st<std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>, std::_Select1st<std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%class.RangeVecMap = type <{ %"class.std::vector.211", [8 x i8] }>
%"class.std::vector.211" = type { %"struct.std::_Vector_base.212" }
%"struct.std::_Vector_base.212" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"class.std::vector.216" = type { %"struct.std::_Vector_base.217" }
%"struct.std::_Vector_base.217" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::LifetimeRef" = type { i32 }
%"struct.std::pair" = type { %"struct.HIR::Pattern", %"class.HIR::TypeRef" }
%"struct.HIR::Pattern" = type <{ %"class.std::vector.117", %"class.HIR::Pattern::Data", i32, [4 x i8] }>
%"class.std::vector.117" = type { %"struct.std::_Vector_base.118" }
%"struct.std::_Vector_base.118" = type { %"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Pattern::Data" = type { i32, %"union.HIR::Pattern::Data::DataUnion" }
%"union.HIR::Pattern::Data::DataUnion" = type { %"struct.HIR::Pattern::Data::Data_PathValue", [64 x i8] }
%"struct.HIR::Pattern::Data::Data_PathValue" = type { %"class.HIR::Path", %"class.HIR::Pattern::PathBinding" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.29" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::PathParams" = type { %class.ThinVector.26, %class.ThinVector.27, %class.ThinVector.28 }
%class.ThinVector.26 = type { ptr }
%class.ThinVector.27 = type { ptr }
%class.ThinVector.28 = type { ptr }
%"class.std::unique_ptr.29" = type { %"struct.std::__uniq_ptr_data.30" }
%"struct.std::__uniq_ptr_data.30" = type { %"class.std::__uniq_ptr_impl.31" }
%"class.std::__uniq_ptr_impl.31" = type { %"class.std::tuple.32" }
%"class.std::tuple.32" = type { %"struct.std::_Tuple_impl.33" }
%"struct.std::_Tuple_impl.33" = type { %"struct.std::_Head_base.36" }
%"struct.std::_Head_base.36" = type { ptr }
%"class.HIR::Pattern::PathBinding" = type { i32, %"union.HIR::Pattern::PathBinding::DataUnion" }
%"union.HIR::Pattern::PathBinding::DataUnion" = type { %"struct.HIR::Pattern::PathBinding::Data_Enum" }
%"struct.HIR::Pattern::PathBinding::Data_Enum" = type { ptr, i32 }

@.str.8 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr

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

declare i32 @__gxx_personality_v0(...)

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

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

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 #3

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 #3

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR8TypeData9is_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184)) #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS3_7TypeRefENS_12MethodAccessE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(352) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %4) #4 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca %"class.std::function.521", align 8
  %14 = alloca %class.anon.655, align 1
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca %struct.Span, align 8
  %18 = alloca %"class.std::function", align 8
  %19 = alloca %class.anon.657, align 8
  %20 = alloca %struct.GetSelf, align 8
  %21 = alloca %"struct.HMTypeInferrence::ResolvePlaceholders", align 8
  %22 = alloca %struct.Span, align 8
  %23 = alloca %"class.std::function", align 8
  %24 = alloca %class.anon.658, align 8
  %25 = alloca i32, align 4
  %26 = 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 i32 %4, ptr %11, align 4, !tbaa !9
  %27 = load ptr, ptr %7, align 8
  %28 = load ptr, ptr %9, align 8, !tbaa !5
  %29 = getelementptr inbounds %"class.HIR::Function", ptr %28, i32 0, i32 2
  %30 = load i32, ptr %29, align 8, !tbaa !11
  switch i32 %30, label %220 [
    i32 0, label %31
    i32 1, label %32
    i32 2, label %41
    i32 3, label %69
    i32 4, label %97
    i32 6, label %125
    i32 5, label %200
  ]

31:                                               ; preds = %5
  store ptr null, ptr %6, align 8
  br label %221

32:                                               ; preds = %5
  %33 = load i32, ptr %11, align 4, !tbaa !9
  %34 = icmp sge i32 %33, 2
  br i1 %34, label %35, label %40

35:                                               ; preds = %32
  %36 = getelementptr inbounds %class.TraitResolution, ptr %27, i32 0, i32 2
  %37 = load ptr, ptr %36, align 8, !tbaa !57
  %38 = load ptr, ptr %10, align 8, !tbaa !5
  %39 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %37, ptr noundef nonnull align 8 dereferenceable(8) %38)
  store ptr %39, ptr %6, align 8
  br label %221

40:                                               ; preds = %32
  br label %220

41:                                               ; preds = %5
  %42 = load ptr, ptr %10, align 8, !tbaa !5
  %43 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %42)
  %44 = call noundef zeroext i1 @_ZNK3HIR8TypeData9is_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %43)
  br i1 %44, label %46, label %45

45:                                               ; preds = %41
  br label %68

46:                                               ; preds = %41
  %47 = load ptr, ptr %10, align 8, !tbaa !5
  %48 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %47)
  %49 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %48)
  %50 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %49, i32 0, i32 1
  %51 = load i32, ptr %50, align 4, !tbaa !80
  %52 = icmp ne i32 %51, 2
  br i1 %52, label %53, label %54

53:                                               ; preds = %46
  br label %67

54:                                               ; preds = %46
  %55 = load i32, ptr %11, align 4, !tbaa !9
  %56 = icmp slt i32 %55, 2
  br i1 %56, label %57, label %58

57:                                               ; preds = %54
  br label %66

58:                                               ; preds = %54
  %59 = getelementptr inbounds %class.TraitResolution, ptr %27, i32 0, i32 2
  %60 = load ptr, ptr %59, align 8, !tbaa !57
  %61 = load ptr, ptr %10, align 8, !tbaa !5
  %62 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %61)
  %63 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %64 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %63, i32 0, i32 2
  %65 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %60, ptr noundef nonnull align 8 dereferenceable(8) %64)
  store ptr %65, ptr %6, align 8
  br label %221

66:                                               ; preds = %57
  br label %67

67:                                               ; preds = %66, %53
  br label %68

68:                                               ; preds = %67, %45
  br label %220

69:                                               ; preds = %5
  %70 = load ptr, ptr %10, align 8, !tbaa !5
  %71 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %70)
  %72 = call noundef zeroext i1 @_ZNK3HIR8TypeData9is_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %71)
  br i1 %72, label %74, label %73

73:                                               ; preds = %69
  br label %96

74:                                               ; preds = %69
  %75 = load ptr, ptr %10, align 8, !tbaa !5
  %76 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %75)
  %77 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %76)
  %78 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %77, i32 0, i32 1
  %79 = load i32, ptr %78, align 4, !tbaa !80
  %80 = icmp ne i32 %79, 1
  br i1 %80, label %81, label %82

81:                                               ; preds = %74
  br label %95

82:                                               ; preds = %74
  %83 = load i32, ptr %11, align 4, !tbaa !9
  %84 = icmp slt i32 %83, 1
  br i1 %84, label %85, label %86

85:                                               ; preds = %82
  br label %94

86:                                               ; preds = %82
  %87 = getelementptr inbounds %class.TraitResolution, ptr %27, i32 0, i32 2
  %88 = load ptr, ptr %87, align 8, !tbaa !57
  %89 = load ptr, ptr %10, align 8, !tbaa !5
  %90 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %89)
  %91 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %90)
  %92 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %91, i32 0, i32 2
  %93 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %88, ptr noundef nonnull align 8 dereferenceable(8) %92)
  store ptr %93, ptr %6, align 8
  br label %221

94:                                               ; preds = %85
  br label %95

95:                                               ; preds = %94, %81
  br label %96

96:                                               ; preds = %95, %73
  br label %220

97:                                               ; preds = %5
  %98 = load ptr, ptr %10, align 8, !tbaa !5
  %99 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %98)
  %100 = call noundef zeroext i1 @_ZNK3HIR8TypeData9is_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %99)
  br i1 %100, label %102, label %101

101:                                              ; preds = %97
  br label %124

102:                                              ; preds = %97
  %103 = load ptr, ptr %10, align 8, !tbaa !5
  %104 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %103)
  %105 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %104)
  %106 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %105, i32 0, i32 1
  %107 = load i32, ptr %106, align 4, !tbaa !80
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %109, label %110

109:                                              ; preds = %102
  br label %123

110:                                              ; preds = %102
  %111 = load i32, ptr %11, align 4, !tbaa !9
  %112 = icmp slt i32 %111, 0
  br i1 %112, label %113, label %114

113:                                              ; preds = %110
  br label %122

114:                                              ; preds = %110
  %115 = getelementptr inbounds %class.TraitResolution, ptr %27, i32 0, i32 2
  %116 = load ptr, ptr %115, align 8, !tbaa !57
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %117)
  %119 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %118)
  %120 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %119, i32 0, i32 2
  %121 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %116, ptr noundef nonnull align 8 dereferenceable(8) %120)
  store ptr %121, ptr %6, align 8
  br label %221

122:                                              ; preds = %113
  br label %123

123:                                              ; preds = %122, %109
  br label %124

124:                                              ; preds = %123, %101
  br label %220

125:                                              ; preds = %5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %126 = load ptr, ptr %9, align 8, !tbaa !5
  %127 = getelementptr inbounds %"class.HIR::Function", ptr %126, i32 0, i32 8
  %128 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %127) #6
  %129 = getelementptr inbounds %"struct.std::pair", ptr %128, i32 0, i32 1
  store ptr %129, ptr %12, align 8, !tbaa !5
  br label %130

130:                                              ; preds = %125
  %131 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #6
  call void @"_ZNSt8functionIFbRKN3HIR7TypeRefEEEC2IZNK15TraitResolution21check_method_receiverERK4SpanRKNS0_8FunctionES3_NS7_12MethodAccessEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  %132 = invoke noundef zeroext i1 @_Z13visit_ty_withRKN3HIR7TypeRefESt8functionIFbS2_EE(ptr noundef nonnull align 8 dereferenceable(8) %131, ptr noundef %13)
          to label %133 unwind label %142

133:                                              ; preds = %130
  %134 = xor i1 %132, true
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  br i1 %134, label %135, label %154

135:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %136)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %137 = getelementptr inbounds %class.anon.657, ptr %19, i32 0, i32 0
  %138 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %138, ptr %137, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS8_7TypeRefENS4_12MethodAccessEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #6
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef %18)
          to label %139 unwind label %146

139:                                              ; preds = %135
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  %140 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %140, ptr noundef @.str.8)
          to label %141 unwind label %150

141:                                              ; preds = %139
  call void @__cxa_throw(ptr %140, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #7
  unreachable

142:                                              ; preds = %130
  %143 = landingpad { ptr, i32 }
          cleanup
  %144 = extractvalue { ptr, i32 } %143, 0
  store ptr %144, ptr %15, align 8
  %145 = extractvalue { ptr, i32 } %143, 1
  store i32 %145, ptr %16, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  br label %199

146:                                              ; preds = %135
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %15, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %16, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %199

150:                                              ; preds = %139
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %15, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %16, align 4
  call void @__cxa_free_exception(ptr %140) #6
  br label %199

154:                                              ; preds = %133
  br label %155

155:                                              ; preds = %154
  br label %156

156:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #6
  call void @_ZZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS3_7TypeRefENS_12MethodAccessEEN7GetSelfC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  %157 = load ptr, ptr %12, align 8, !tbaa !5
  %158 = load ptr, ptr %8, align 8, !tbaa !5
  %159 = load ptr, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #6
  %160 = getelementptr inbounds %class.TraitResolution, ptr %27, i32 0, i32 2
  %161 = load ptr, ptr %160, align 8, !tbaa !57
  call void @_ZNK16HMTypeInferrence22callback_resolve_inferEv(ptr dead_on_unwind writable sret(%"struct.HMTypeInferrence::ResolvePlaceholders") align 8 %21, ptr noundef nonnull align 8 dereferenceable(49) %161)
  %162 = call noundef zeroext i1 @_ZNK3HIR7TypeRef19match_test_genericsERK4SpanRKS0_RKNS_19ResolvePlaceholdersERNS_13MatchGenericsE(ptr noundef nonnull align 8 dereferenceable(8) %157, ptr noundef nonnull align 8 dereferenceable(8) %158, ptr noundef nonnull align 8 dereferenceable(8) %159, ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %20)
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #6
  br i1 %162, label %163, label %193

163:                                              ; preds = %156
  br label %164

164:                                              ; preds = %163
  %165 = getelementptr inbounds %struct.GetSelf, ptr %20, i32 0, i32 1
  %166 = load ptr, ptr %165, align 8, !tbaa !85
  %167 = icmp ne ptr %166, null
  br i1 %167, label %185, label %168

168:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %169 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %169)
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #6
  %170 = getelementptr inbounds %class.anon.658, ptr %24, i32 0, i32 0
  %171 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %171, ptr %170, align 8, !tbaa !5
  %172 = getelementptr inbounds %class.anon.658, ptr %24, i32 0, i32 1
  %173 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %173, ptr %172, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS8_7TypeRefENS4_12MethodAccessEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(16) %24) #6
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef %23)
          to label %174 unwind label %177

174:                                              ; preds = %168
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #6
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  %175 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %175, ptr noundef @.str.8)
          to label %176 unwind label %181

176:                                              ; preds = %174
  call void @__cxa_throw(ptr %175, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #7
  unreachable

177:                                              ; preds = %168
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %15, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %16, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #6
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %197

181:                                              ; preds = %174
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %15, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %16, align 4
  call void @__cxa_free_exception(ptr %175) #6
  br label %197

185:                                              ; preds = %164
  br label %186

186:                                              ; preds = %185
  br label %187

187:                                              ; preds = %186
  %188 = getelementptr inbounds %class.TraitResolution, ptr %27, i32 0, i32 2
  %189 = load ptr, ptr %188, align 8, !tbaa !57
  %190 = getelementptr inbounds %struct.GetSelf, ptr %20, i32 0, i32 1
  %191 = load ptr, ptr %190, align 8, !tbaa !85
  %192 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %189, ptr noundef nonnull align 8 dereferenceable(8) %191)
  store ptr %192, ptr %6, align 8
  store i32 1, ptr %25, align 4
  br label %194

193:                                              ; preds = %156
  store i32 0, ptr %25, align 4
  br label %194

194:                                              ; preds = %193, %187
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #6
  %195 = load i32, ptr %25, align 4
  switch i32 %195, label %198 [
    i32 0, label %196
  ]

196:                                              ; preds = %194
  store ptr null, ptr %6, align 8
  store i32 1, ptr %25, align 4
  br label %198

197:                                              ; preds = %181, %177
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #6
  br label %199

198:                                              ; preds = %196, %194
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %221

199:                                              ; preds = %197, %150, %146, %142
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %223

200:                                              ; preds = %5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %201 = load ptr, ptr %8, align 8, !tbaa !5
  %202 = load ptr, ptr %10, align 8, !tbaa !5
  %203 = call noundef ptr @_ZNK15TraitResolution17type_is_owned_boxERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %27, ptr noundef nonnull align 8 dereferenceable(8) %201, ptr noundef nonnull align 8 dereferenceable(8) %202)
  store ptr %203, ptr %26, align 8, !tbaa !5
  %204 = load ptr, ptr %26, align 8, !tbaa !5
  %205 = icmp ne ptr %204, null
  br i1 %205, label %206, label %216

206:                                              ; preds = %200
  %207 = load i32, ptr %11, align 4, !tbaa !9
  %208 = icmp slt i32 %207, 2
  br i1 %208, label %209, label %210

209:                                              ; preds = %206
  br label %215

210:                                              ; preds = %206
  %211 = getelementptr inbounds %class.TraitResolution, ptr %27, i32 0, i32 2
  %212 = load ptr, ptr %211, align 8, !tbaa !57
  %213 = load ptr, ptr %26, align 8, !tbaa !5
  %214 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %212, ptr noundef nonnull align 8 dereferenceable(8) %213)
  store ptr %214, ptr %6, align 8
  store i32 1, ptr %25, align 4
  br label %217

215:                                              ; preds = %209
  br label %216

216:                                              ; preds = %215, %200
  store i32 0, ptr %25, align 4
  br label %217

217:                                              ; preds = %216, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  %218 = load i32, ptr %25, align 4
  switch i32 %218, label %228 [
    i32 0, label %219
    i32 1, label %221
  ]

219:                                              ; preds = %217
  br label %220

220:                                              ; preds = %219, %124, %96, %68, %40, %5
  store ptr null, ptr %6, align 8
  br label %221

221:                                              ; preds = %220, %217, %198, %114, %86, %58, %35, %31
  %222 = load ptr, ptr %6, align 8
  ret ptr %222

223:                                              ; preds = %199
  %224 = load ptr, ptr %15, align 8
  %225 = load i32, ptr %16, align 4
  %226 = insertvalue { ptr, i32 } poison, ptr %224, 0
  %227 = insertvalue { ptr, i32 } %226, i32 %225, 1
  resume { ptr, i32 } %227

228:                                              ; preds = %217
  unreachable
}

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS3_7TypeRefENS_12MethodAccessEEN7GetSelfC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1 align 2

declare noundef zeroext i1 @_ZNK3HIR7TypeRef19match_test_genericsERK4SpanRKS0_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 hidden void @"_ZNSt8functionIFvRSoEEC2IZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS8_7TypeRefENS4_12MethodAccessEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTSN15TraitResolution12MethodAccessE", !7, i64 0}
!11 = !{!12, !19, i64 80}
!12 = !{!"_ZTSN3HIR8FunctionE", !13, i64 0, !14, i64 8, !19, i64 80, !20, i64 88, !21, i64 96, !13, i64 104, !13, i64 105, !22, i64 112, !39, i64 208, !13, i64 232, !20, i64 240, !43, i64 248, !51, i64 320}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSN3HIR7LinkageE", !15, i64 0, !16, i64 8, !16, i64 40}
!15 = !{!"_ZTSN3HIR7Linkage4TypeE", !7, i64 0}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !17, i64 0, !18, i64 8, !7, i64 16}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"_ZTSN3HIR8Function8ReceiverE", !7, i64 0}
!20 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!21 = !{!"_ZTS8RcString", !6, i64 0}
!22 = !{!"_ZTSN3HIR13GenericParamsE", !23, i64 0, !27, i64 24, !31, i64 48, !35, i64 72}
!23 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!"_ZTSSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!"_ZTSN3HIR7ExprPtrE", !44, i64 0, !45, i64 8, !45, i64 32, !49, i64 56, !50, i64 64}
!44 = !{!"_ZTSN3HIR12ExprPtrInnerE", !6, i64 0}
!45 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !46, i64 0}
!46 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!49 = !{!"_ZTSN3MIR15FunctionPointerE", !6, i64 0}
!50 = !{!"_ZTSN3HIR12ExprStatePtrE", !6, i64 0}
!51 = !{!"_ZTSN3HIR8Function8MarkingsE", !52, i64 0, !13, i64 24, !56, i64 28}
!52 = !{!"_ZTSSt6vectorIjSaIjEE", !53, i64 0}
!53 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !55, i64 0}
!55 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!56 = !{!"_ZTSN3HIR8Function8Markings6InlineE", !7, i64 0}
!57 = !{!58, !6, i64 224}
!58 = !{!"_ZTS15TraitResolution", !59, i64 0, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !76, i64 256}
!59 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !60, i64 24, !68, i64 72, !74, i64 104, !74, i64 112, !74, i64 120, !74, i64 128, !74, i64 136, !74, i64 144, !74, i64 152, !74, i64 160, !74, i64 168, !74, i64 176, !74, i64 184, !74, i64 192, !74, i64 200, !74, i64 208}
!60 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !61, i64 0}
!61 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !62, i64 0}
!62 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !63, i64 0, !65, i64 8}
!63 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !64, i64 0}
!64 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!65 = !{!"_ZTSSt15_Rb_tree_header", !66, i64 0, !18, i64 32}
!66 = !{!"_ZTSSt18_Rb_tree_node_base", !67, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!67 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!68 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !69, i64 0, !73, i64 24}
!69 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !70, i64 0}
!70 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !71, i64 0}
!71 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !72, i64 0}
!72 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!73 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!74 = !{!"_ZTSN3HIR10SimplePathE", !75, i64 0}
!75 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!76 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !77, i64 0}
!77 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !78, i64 0}
!78 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !79, i64 0}
!79 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!80 = !{!81, !84, i64 4}
!81 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !82, i64 0, !84, i64 4, !20, i64 8}
!82 = !{!"_ZTSN3HIR11LifetimeRefE", !83, i64 0}
!83 = !{!"int", !7, i64 0}
!84 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!85 = !{!86, !6, i64 8}
!86 = !{!"_ZTSZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS3_7TypeRefENS_12MethodAccessEE7GetSelf", !87, i64 0, !6, i64 8}
!87 = !{!"_ZTSN3HIR13MatchGenericsE"}


; 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"

%"struct.HMTypeInferrence::ResolvePlaceholders" = type { %"class.HIR::ResolvePlaceholders", ptr }
%"class.HIR::ResolvePlaceholders" = type { ptr }
%"class.std::function.521" = 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.655 = type { i8 }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%class.anon.657 = type { ptr }
%struct.GetSelf = type { %"class.HIR::MatchGenerics", ptr }
%"class.HIR::MatchGenerics" = type { ptr }
%class.anon.658 = type { ptr, ptr }

@.str.8 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr

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

declare i32 @__gxx_personality_v0(...)

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

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

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 #3

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 #3

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

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

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

declare void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) 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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR8TypeData9is_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS3_7TypeRefENS_12MethodAccessE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(352) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %4) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::function.521", align 8
  %7 = alloca %class.anon.655, align 1
  %8 = alloca %struct.Span, align 8
  %9 = alloca %"class.std::function", align 8
  %10 = alloca %class.anon.657, align 8
  %11 = alloca %struct.GetSelf, align 8
  %12 = alloca %"struct.HMTypeInferrence::ResolvePlaceholders", align 8
  %13 = alloca %struct.Span, align 8
  %14 = alloca %"class.std::function", align 8
  %15 = alloca %class.anon.658, align 8
  %16 = getelementptr inbounds i8, ptr %2, i64 80
  %17 = load i32, ptr %16, align 8, !tbaa !5
  switch i32 %17, label %.thread [
    i32 5, label %113
    i32 1, label %18
    i32 2, label %24
    i32 3, label %41
    i32 4, label %58
    i32 6, label %75
  ]

18:                                               ; preds = %5
  %19 = icmp sgt i32 %4, 1
  br i1 %19, label %20, label %.thread

20:                                               ; preds = %18
  %21 = getelementptr inbounds i8, ptr %0, i64 224
  %22 = load ptr, ptr %21, align 8, !tbaa !54
  %23 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %22, ptr noundef nonnull align 8 dereferenceable(8) %3)
  br label %.thread

24:                                               ; preds = %5
  %25 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %26 = tail call noundef zeroext i1 @_ZNK3HIR8TypeData9is_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %25)
  br i1 %26, label %27, label %.thread

27:                                               ; preds = %24
  %28 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %29 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %28)
  %30 = getelementptr inbounds i8, ptr %29, i64 4
  %31 = load i32, ptr %30, align 4, !tbaa !77
  %32 = icmp ne i32 %31, 2
  %33 = icmp slt i32 %4, 2
  %or.cond = or i1 %33, %32
  br i1 %or.cond, label %.thread, label %34

34:                                               ; preds = %27
  %35 = getelementptr inbounds i8, ptr %0, i64 224
  %36 = load ptr, ptr %35, align 8, !tbaa !54
  %37 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %38 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %37)
  %39 = getelementptr inbounds i8, ptr %38, i64 8
  %40 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %36, ptr noundef nonnull align 8 dereferenceable(8) %39)
  br label %.thread

41:                                               ; preds = %5
  %42 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %43 = tail call noundef zeroext i1 @_ZNK3HIR8TypeData9is_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %42)
  br i1 %43, label %44, label %.thread

44:                                               ; preds = %41
  %45 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %46 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %45)
  %47 = getelementptr inbounds i8, ptr %46, i64 4
  %48 = load i32, ptr %47, align 4, !tbaa !77
  %49 = icmp ne i32 %48, 1
  %50 = icmp slt i32 %4, 1
  %or.cond3 = or i1 %50, %49
  br i1 %or.cond3, label %.thread, label %51

51:                                               ; preds = %44
  %52 = getelementptr inbounds i8, ptr %0, i64 224
  %53 = load ptr, ptr %52, align 8, !tbaa !54
  %54 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %55 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %54)
  %56 = getelementptr inbounds i8, ptr %55, i64 8
  %57 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %53, ptr noundef nonnull align 8 dereferenceable(8) %56)
  br label %.thread

58:                                               ; preds = %5
  %59 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %60 = tail call noundef zeroext i1 @_ZNK3HIR8TypeData9is_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %59)
  br i1 %60, label %61, label %.thread

61:                                               ; preds = %58
  %62 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %63 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %64 = getelementptr inbounds i8, ptr %63, i64 4
  %65 = load i32, ptr %64, align 4, !tbaa !77
  %66 = icmp ne i32 %65, 0
  %67 = icmp slt i32 %4, 0
  %or.cond5 = or i1 %67, %66
  br i1 %or.cond5, label %.thread, label %68

68:                                               ; preds = %61
  %69 = getelementptr inbounds i8, ptr %0, i64 224
  %70 = load ptr, ptr %69, align 8, !tbaa !54
  %71 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %72 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %71)
  %73 = getelementptr inbounds i8, ptr %72, i64 8
  %74 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %73)
  br label %.thread

75:                                               ; preds = %5
  %76 = getelementptr inbounds i8, ptr %2, i64 208
  %77 = tail call noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #6
  %78 = getelementptr inbounds i8, ptr %77, i64 216
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #6
  call void @"_ZNSt8functionIFbRKN3HIR7TypeRefEEEC2IZNK15TraitResolution21check_method_receiverERK4SpanRKNS0_8FunctionES3_NS7_12MethodAccessEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %7) #6
  %79 = invoke noundef zeroext i1 @_Z13visit_ty_withRKN3HIR7TypeRefESt8functionIFbS2_EE(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull %6)
          to label %80 unwind label %85

80:                                               ; preds = %75
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #6
  br i1 %79, label %91, label %81

81:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  store ptr %78, ptr %10, align 8, !tbaa !82
  call void @"_ZNSt8functionIFvRSoEEC2IZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS8_7TypeRefENS4_12MethodAccessEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull %9)
          to label %82 unwind label %87

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

84:                                               ; preds = %82
  call void @__cxa_throw(ptr nonnull %83, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #7
  unreachable

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

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

89:                                               ; preds = %82
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %83) #6
  br label %112

91:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #6
  call void @_ZZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS3_7TypeRefENS_12MethodAccessEEN7GetSelfC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #6
  %92 = getelementptr inbounds i8, ptr %0, i64 224
  %93 = load ptr, ptr %92, align 8, !tbaa !54
  call void @_ZNK16HMTypeInferrence22callback_resolve_inferEv(ptr dead_on_unwind nonnull writable sret(%"struct.HMTypeInferrence::ResolvePlaceholders") align 8 %12, ptr noundef nonnull align 8 dereferenceable(49) %93)
  %94 = call noundef zeroext i1 @_ZNK3HIR7TypeRef19match_test_genericsERK4SpanRKS0_RKNS_19ResolvePlaceholdersERNS_13MatchGenericsE(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %11)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #6
  br i1 %94, label %95, label %110

95:                                               ; preds = %91
  %96 = getelementptr inbounds i8, ptr %11, i64 8
  %97 = load ptr, ptr %96, align 8, !tbaa !83
  %.not = icmp eq ptr %97, null
  br i1 %.not, label %98, label %107

98:                                               ; preds = %95
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #6
  store ptr %78, ptr %15, align 8, !tbaa !82
  %99 = getelementptr inbounds i8, ptr %15, i64 8
  store ptr %3, ptr %99, align 8, !tbaa !82
  call void @"_ZNSt8functionIFvRSoEEC2IZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS8_7TypeRefENS4_12MethodAccessEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull %14)
          to label %100 unwind label %103

100:                                              ; preds = %98
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #6
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  %101 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull @.str.8)
          to label %102 unwind label %105

102:                                              ; preds = %100
  call void @__cxa_throw(ptr nonnull %101, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #7
  unreachable

103:                                              ; preds = %98
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #6
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  br label %111

105:                                              ; preds = %100
  %106 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %101) #6
  br label %111

107:                                              ; preds = %95
  %108 = load ptr, ptr %92, align 8, !tbaa !54
  %109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %108, ptr noundef nonnull align 8 dereferenceable(8) %97)
  br label %110

110:                                              ; preds = %91, %107
  %spec.select = phi ptr [ %109, %107 ], [ null, %91 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #6
  br label %.thread

111:                                              ; preds = %105, %103
  %.pn = phi { ptr, i32 } [ %106, %105 ], [ %104, %103 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #6
  br label %112

112:                                              ; preds = %111, %89, %87, %85
  %.pn52 = phi { ptr, i32 } [ %90, %89 ], [ %88, %87 ], [ %.pn, %111 ], [ %86, %85 ]
  resume { ptr, i32 } %.pn52

113:                                              ; preds = %5
  %114 = tail call noundef ptr @_ZNK15TraitResolution17type_is_owned_boxERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %115 = icmp ne ptr %114, null
  %116 = icmp sgt i32 %4, 1
  %or.cond7.not = and i1 %116, %115
  br i1 %or.cond7.not, label %117, label %.thread

117:                                              ; preds = %113
  %118 = getelementptr inbounds i8, ptr %0, i64 224
  %119 = load ptr, ptr %118, align 8, !tbaa !54
  %120 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %119, ptr noundef nonnull align 8 dereferenceable(8) %114)
  br label %.thread

.thread:                                          ; preds = %113, %5, %18, %27, %24, %44, %41, %61, %58, %117, %110, %68, %51, %34, %20
  %.3 = phi ptr [ %120, %117 ], [ %spec.select, %110 ], [ %74, %68 ], [ %57, %51 ], [ %40, %34 ], [ %23, %20 ], [ null, %58 ], [ null, %61 ], [ null, %41 ], [ null, %44 ], [ null, %24 ], [ null, %27 ], [ null, %18 ], [ null, %5 ], [ null, %113 ]
  ret ptr %.3
}

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS3_7TypeRefENS_12MethodAccessEEN7GetSelfC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1 align 2

declare noundef zeroext i1 @_ZNK3HIR7TypeRef19match_test_genericsERK4SpanRKS0_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 hidden void @"_ZNSt8functionIFvRSoEEC2IZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS8_7TypeRefENS4_12MethodAccessEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !16, i64 80}
!6 = !{!"_ZTSN3HIR8FunctionE", !7, i64 0, !10, i64 8, !16, i64 80, !17, i64 88, !18, i64 96, !7, i64 104, !7, i64 105, !19, i64 112, !36, i64 208, !7, i64 232, !17, i64 240, !40, i64 248, !48, i64 320}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN3HIR7LinkageE", !11, i64 0, !12, i64 8, !12, i64 40}
!11 = !{!"_ZTSN3HIR7Linkage4TypeE", !8, i64 0}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !13, i64 0, !15, i64 8, !8, i64 16}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !14, i64 0}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!"long", !8, i64 0}
!16 = !{!"_ZTSN3HIR8Function8ReceiverE", !8, i64 0}
!17 = !{!"_ZTSN3HIR7TypeRefE", !14, i64 0}
!18 = !{!"_ZTS8RcString", !14, i64 0}
!19 = !{!"_ZTSN3HIR13GenericParamsE", !20, i64 0, !24, i64 24, !28, i64 48, !32, i64 72}
!20 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!24 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!28 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!32 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!36 = !{!"_ZTSSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!40 = !{!"_ZTSN3HIR7ExprPtrE", !41, i64 0, !42, i64 8, !42, i64 32, !46, i64 56, !47, i64 64}
!41 = !{!"_ZTSN3HIR12ExprPtrInnerE", !14, i64 0}
!42 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !43, i64 0}
!43 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!46 = !{!"_ZTSN3MIR15FunctionPointerE", !14, i64 0}
!47 = !{!"_ZTSN3HIR12ExprStatePtrE", !14, i64 0}
!48 = !{!"_ZTSN3HIR8Function8MarkingsE", !49, i64 0, !7, i64 24, !53, i64 28}
!49 = !{!"_ZTSSt6vectorIjSaIjEE", !50, i64 0}
!50 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!53 = !{!"_ZTSN3HIR8Function8Markings6InlineE", !8, i64 0}
!54 = !{!55, !14, i64 224}
!55 = !{!"_ZTS15TraitResolution", !56, i64 0, !14, i64 216, !14, i64 224, !14, i64 232, !14, i64 240, !14, i64 248, !73, i64 256}
!56 = !{!"_ZTS18TraitResolveCommon", !14, i64 0, !14, i64 8, !14, i64 16, !57, i64 24, !65, i64 72, !71, i64 104, !71, i64 112, !71, i64 120, !71, i64 128, !71, i64 136, !71, i64 144, !71, i64 152, !71, i64 160, !71, i64 168, !71, i64 176, !71, i64 184, !71, i64 192, !71, i64 200, !71, i64 208}
!57 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !58, i64 0}
!58 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !59, i64 0}
!59 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !60, i64 0, !62, i64 8}
!60 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !61, i64 0}
!61 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!62 = !{!"_ZTSSt15_Rb_tree_header", !63, i64 0, !15, i64 32}
!63 = !{!"_ZTSSt18_Rb_tree_node_base", !64, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!64 = !{!"_ZTSSt14_Rb_tree_color", !8, i64 0}
!65 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !66, i64 0, !70, i64 24}
!66 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !67, i64 0}
!67 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!70 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!71 = !{!"_ZTSN3HIR10SimplePathE", !72, i64 0}
!72 = !{!"_ZTS10ThinVectorI8RcStringE", !14, i64 0}
!73 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !74, i64 0}
!74 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !75, i64 0}
!75 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !76, i64 0}
!76 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!77 = !{!78, !81, i64 4}
!78 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !79, i64 0, !81, i64 4, !17, i64 8}
!79 = !{!"_ZTSN3HIR11LifetimeRefE", !80, i64 0}
!80 = !{!"int", !8, i64 0}
!81 = !{!"_ZTSN3HIR10BorrowTypeE", !8, i64 0}
!82 = !{!14, !14, i64 0}
!83 = !{!84, !14, i64 8}
!84 = !{!"_ZTSZNK15TraitResolution21check_method_receiverERK4SpanRKN3HIR8FunctionERKNS3_7TypeRefENS_12MethodAccessEE7GetSelf", !85, i64 0, !14, i64 8}
!85 = !{!"_ZTSN3HIR13MatchGenericsE"}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass