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

; 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.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.17" }
%"class.HIR::GenericParams" = type { %"class.std::vector", %"class.std::vector.2", %"class.std::vector.7", %"class.std::vector.12" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.2" = type { %"struct.std::_Vector_base.3" }
%"struct.std::_Vector_base.3" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.7" = type { %"struct.std::_Vector_base.8" }
%"struct.std::_Vector_base.8" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.12" = type { %"struct.std::_Vector_base.13" }
%"struct.std::_Vector_base.13" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.RcString = type { ptr }
%"class.HIR::TypeRef" = type { ptr }
%"class.std::vector.17" = type { %"struct.std::_Vector_base.18" }
%"struct.std::_Vector_base.18" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon = type { ptr }
%class.anon.33 = type { i8 }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.34" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.34" = type { %"struct.std::_Vector_base.35" }
%"struct.std::_Vector_base.35" = 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 }
%"struct.HIR::PathParams" = type { %class.ThinVector.22, %class.ThinVector.23, %class.ThinVector.24 }
%class.ThinVector.22 = type { ptr }
%class.ThinVector.23 = type { ptr }
%class.ThinVector.24 = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.anon.97 = type { ptr }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.25" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"class.std::unique_ptr.25" = type { %"struct.std::__uniq_ptr_data.26" }
%"struct.std::__uniq_ptr_data.26" = type { %"class.std::__uniq_ptr_impl.27" }
%"class.std::__uniq_ptr_impl.27" = type { %"class.std::tuple.28" }
%"class.std::tuple.28" = type { %"struct.std::_Tuple_impl.29" }
%"struct.std::_Tuple_impl.29" = type { %"struct.std::_Head_base.32" }
%"struct.std::_Head_base.32" = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.134" = type { ptr }
%class.anon.138 = type { i8 }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"class.HIR::TypeData_NamedFunction_Ty" = type { i32, %"union.HIR::TypeData_NamedFunction_Ty::DataUnion" }
%"union.HIR::TypeData_NamedFunction_Ty::DataUnion" = type { %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" }
%"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" = type { ptr, i64 }
%"struct.HIR::Path::Data::Data_UfcsInherent" = type { %"class.HIR::TypeRef", %class.RcString, %"struct.HIR::PathParams", %"struct.HIR::PathParams" }
%"class.HIR::Function" = type { i8, %"struct.HIR::Linkage", i32, %"class.HIR::TypeRef", %class.RcString, i8, i8, %"class.HIR::GenericParams", %"class.std::vector.43", 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.42 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.42 = type { i64, [8 x i8] }
%"class.std::vector.43" = type { %"struct.std::_Vector_base.44" }
%"struct.std::_Vector_base.44" = 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.17", %"class.std::vector.17", %"class.MIR::FunctionPointer", %"class.HIR::ExprStatePtr" }
%"class.HIR::ExprPtrInner" = type { ptr }
%"class.MIR::FunctionPointer" = type { ptr }
%"class.HIR::ExprStatePtr" = type { ptr }
%"struct.HIR::Function::Markings" = type { %"class.std::vector.48", i8, i32 }
%"class.std::vector.48" = type { %"struct.std::_Vector_base.49" }
%"struct.std::_Vector_base.49" = 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.std::pair" = type { %"struct.HIR::Pattern", %"class.HIR::TypeRef" }
%"struct.HIR::Pattern" = type <{ %"class.std::vector.53", %"class.HIR::Pattern::Data", i32, [4 x i8] }>
%"class.std::vector.53" = type { %"struct.std::_Vector_base.54" }
%"struct.std::_Vector_base.54" = 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::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 }
%"class.HIR::Enum" = type { %"class.HIR::GenericParams", i8, i32, %"class.HIR::Enum::Class", %"struct.HIR::TraitMarkings" }
%"class.HIR::Enum::Class" = type { i32, %"union.HIR::Enum::Class::DataUnion" }
%"union.HIR::Enum::Class::DataUnion" = type { %"class.std::vector.84", [8 x i8] }
%"class.std::vector.84" = type { %"struct.std::_Vector_base.85" }
%"struct.std::_Vector_base.85" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TraitMarkings" = type { i8, i8, i8, %"class.std::map" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.HIR::Enum::DataVariant" = type { %class.RcString, i8, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.25" }
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.124" }
%"class.std::vector.124" = type { %"struct.std::_Vector_base.125" }
%"struct.std::_Vector_base.125" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%"struct.HIR::VisEnt" = type { %"class.HIR::Publicity", %"class.HIR::TypeRef" }
%"class.HIR::Publicity" = type { %"class.std::shared_ptr.135" }
%"class.std::shared_ptr.135" = type { %"class.std::__shared_ptr.136" }
%"class.std::__shared_ptr.136" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }

@.str.18 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span = external hidden unnamed_addr constant [93 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.31 = external hidden unnamed_addr constant [5 x i8], align 1

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

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind noalias writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8 %0, ptr noundef nonnull align 8 dereferenceable(112) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca ptr, align 8
  %15 = alloca %struct.Span, align 8
  %16 = alloca %"class.std::function", align 8
  %17 = alloca %class.anon, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca i8, align 1
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca i8, align 1
  %29 = alloca ptr, align 8
  %30 = alloca %struct.Span, align 8
  %31 = alloca %"class.std::function", align 8
  %32 = alloca %class.anon.33, align 1
  %33 = alloca %struct.MonomorphStatePtr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i1, align 1
  %36 = alloca %"struct.HIR::PathParams", align 8
  %37 = alloca %"struct.HIR::PathParams", align 8
  %38 = alloca %"struct.HIR::PathParams", align 8
  %39 = alloca ptr, align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"class.HIR::TypeRef", align 8
  %44 = alloca i8, align 1
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca %struct.MonomorphStatePtr, align 8
  %48 = alloca %"struct.HIR::SimplePath", align 8
  %49 = alloca ptr, align 8
  %50 = alloca %struct.Span, align 8
  %51 = alloca %"class.std::function", align 8
  %52 = alloca %class.anon.97, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca i1, align 1
  %57 = alloca %"class.HIR::Path", align 8
  %58 = alloca %"class.HIR::GenericPath", align 8
  %59 = alloca %"struct.HIR::SimplePath", align 8
  %60 = alloca %"struct.HIR::PathParams", align 8
  %61 = alloca %"class.HIR::TypePathBinding", align 8
  %62 = alloca i1, align 1
  %63 = alloca i1, align 1
  %64 = alloca ptr, align 8
  %65 = alloca %"class.__gnu_cxx::__normal_iterator.134", align 8
  %66 = alloca %"class.__gnu_cxx::__normal_iterator.134", align 8
  %67 = alloca ptr, align 8
  %68 = alloca %"class.HIR::TypeRef", align 8
  %69 = alloca i8, align 1
  %70 = alloca ptr, align 8
  %71 = alloca ptr, align 8
  %72 = alloca %struct.MonomorphStatePtr, align 8
  %73 = alloca i1, align 1
  %74 = alloca %"class.HIR::Path", align 8
  %75 = alloca %"class.HIR::TypePathBinding", align 8
  %76 = alloca i1, align 1
  %77 = alloca i1, align 1
  %78 = alloca ptr, align 8
  %79 = alloca %"class.__gnu_cxx::__normal_iterator.134", align 8
  %80 = alloca %"class.__gnu_cxx::__normal_iterator.134", align 8
  %81 = alloca ptr, align 8
  %82 = alloca %"class.HIR::TypeRef", align 8
  %83 = alloca %struct.Span, align 8
  %84 = alloca %"class.std::function", align 8
  %85 = alloca %class.anon.138, align 1
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %86 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #9
  store i8 1, ptr %10, align 1, !tbaa !9
  br label %87

87:                                               ; preds = %705, %3
  %88 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %89 = trunc i8 %88 to i1
  br i1 %89, label %91, label %90

90:                                               ; preds = %87
  store i32 2, ptr %11, align 4
  br label %706

91:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  %92 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %86, i32 0, i32 1
  store ptr %92, ptr %12, align 8, !tbaa !5
  br label %93

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

96:                                               ; preds = %93
  store i32 5, ptr %11, align 4
  br label %701

97:                                               ; preds = %93
  %98 = load ptr, ptr %12, align 8, !tbaa !5
  %99 = call noundef i32 @_ZNK3HIR25TypeData_NamedFunction_Ty3tagEv(ptr noundef nonnull align 8 dereferenceable(24) %98)
  switch i32 %99, label %699 [
    i32 0, label %100
    i32 1, label %101
    i32 2, label %394
    i32 3, label %591
  ]

100:                                              ; preds = %97
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 133, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span) #10
  unreachable

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

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

105:                                              ; preds = %102
  store i32 9, ptr %11, align 4
  br label %391

106:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %107 = load ptr, ptr %12, align 8, !tbaa !5
  %108 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_NamedFunction_Ty11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
  store ptr %108, ptr %14, align 8, !tbaa !5
  br label %109

109:                                              ; preds = %385, %106
  %110 = load ptr, ptr %14, align 8, !tbaa !5
  %111 = load i8, ptr %13, align 1, !tbaa !9, !range !11, !noundef !12
  %112 = trunc i8 %111 to i1
  br i1 %112, label %114, label %113

113:                                              ; preds = %109
  store i32 12, ptr %11, align 4
  br label %386

114:                                              ; preds = %109
  br label %115

115:                                              ; preds = %114
  %116 = load ptr, ptr %14, align 8, !tbaa !5
  %117 = load ptr, ptr %116, align 8, !tbaa !5
  %118 = icmp ne ptr %117, null
  br i1 %118, label %133, label %119

119:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %120 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %120)
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %121 = getelementptr inbounds %class.anon, ptr %17, i32 0, i32 0
  store ptr %86, ptr %121, align 8, !tbaa !13
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #9
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef %16)
          to label %122 unwind label %125

122:                                              ; preds = %119
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  %123 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %123, ptr noundef @.str.30)
          to label %124 unwind label %129

124:                                              ; preds = %122
  call void @__cxa_throw(ptr %123, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #11
  unreachable

125:                                              ; preds = %119
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %18, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %19, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %388

129:                                              ; preds = %122
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %18, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %19, align 4
  call void @__cxa_free_exception(ptr %123) #9
  br label %388

133:                                              ; preds = %115
  br label %134

134:                                              ; preds = %133
  br label %135

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

136:                                              ; preds = %257, %135
  %137 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %138 = trunc i8 %137 to i1
  br i1 %138, label %140, label %139

139:                                              ; preds = %136
  store i32 17, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  br label %258

140:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %141 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %86, i32 0, i32 0
  %142 = getelementptr inbounds %"class.HIR::Path", ptr %141, i32 0, i32 0
  store ptr %142, ptr %21, align 8, !tbaa !5
  br label %143

143:                                              ; preds = %255, %140
  %144 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %145 = trunc i8 %144 to i1
  br i1 %145, label %147, label %146

146:                                              ; preds = %143
  store i32 20, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %256

147:                                              ; preds = %143
  %148 = load ptr, ptr %21, align 8, !tbaa !5
  %149 = call noundef i32 @_ZNK3HIR4Path4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(88) %148)
  switch i32 %149, label %254 [
    i32 0, label %150
    i32 1, label %151
    i32 3, label %171
    i32 2, label %196
    i32 4, label %220
  ]

150:                                              ; preds = %147
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 136, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span) #10
  unreachable

151:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #9
  store i8 1, ptr %22, align 1, !tbaa !9
  br label %152

152:                                              ; preds = %169, %151
  %153 = load i8, ptr %22, align 1, !tbaa !9, !range !11, !noundef !12
  %154 = trunc i8 %153 to i1
  br i1 %154, label %156, label %155

155:                                              ; preds = %152
  store i32 24, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  br label %170

156:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %157 = load ptr, ptr %21, align 8, !tbaa !5
  %158 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %157)
  store ptr %158, ptr %23, align 8, !tbaa !5
  br label %159

159:                                              ; preds = %167, %156
  %160 = load ptr, ptr %23, align 8, !tbaa !5
  %161 = load i8, ptr %22, align 1, !tbaa !9, !range !11, !noundef !12
  %162 = trunc i8 %161 to i1
  br i1 %162, label %164, label %163

163:                                              ; preds = %159
  store i32 27, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %168

164:                                              ; preds = %159
  %165 = load ptr, ptr %23, align 8, !tbaa !5
  %166 = getelementptr inbounds %"class.HIR::GenericPath", ptr %165, i32 0, i32 1
  store ptr %166, ptr %9, align 8, !tbaa !5
  br label %167

167:                                              ; preds = %164
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %159, !llvm.loop !15

168:                                              ; preds = %163
  br label %169

169:                                              ; preds = %168
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %152, !llvm.loop !17

170:                                              ; preds = %155
  br label %254

171:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #9
  store i8 1, ptr %24, align 1, !tbaa !9
  br label %172

172:                                              ; preds = %194, %171
  %173 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %174 = trunc i8 %173 to i1
  br i1 %174, label %176, label %175

175:                                              ; preds = %172
  store i32 30, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  br label %195

176:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %177 = load ptr, ptr %21, align 8, !tbaa !5
  %178 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNK3HIR4Path4Data12as_UfcsKnownEv(ptr noundef nonnull align 8 dereferenceable(88) %177)
  store ptr %178, ptr %25, align 8, !tbaa !5
  br label %179

179:                                              ; preds = %192, %176
  %180 = load ptr, ptr %25, align 8, !tbaa !5
  %181 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %182 = trunc i8 %181 to i1
  br i1 %182, label %184, label %183

183:                                              ; preds = %179
  store i32 33, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  br label %193

184:                                              ; preds = %179
  %185 = load ptr, ptr %25, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsKnown", ptr %185, i32 0, i32 0
  store ptr %186, ptr %7, align 8, !tbaa !5
  %187 = load ptr, ptr %25, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsKnown", ptr %187, i32 0, i32 1
  %189 = getelementptr inbounds %"class.HIR::GenericPath", ptr %188, i32 0, i32 1
  store ptr %189, ptr %8, align 8, !tbaa !5
  %190 = load ptr, ptr %25, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsKnown", ptr %190, i32 0, i32 3
  store ptr %191, ptr %9, align 8, !tbaa !5
  br label %192

192:                                              ; preds = %184
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %179, !llvm.loop !18

193:                                              ; preds = %183
  br label %194

194:                                              ; preds = %193
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %172, !llvm.loop !19

195:                                              ; preds = %175
  br label %254

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

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

200:                                              ; preds = %197
  store i32 36, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  br label %219

201:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %202 = load ptr, ptr %21, align 8, !tbaa !5
  %203 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK3HIR4Path4Data15as_UfcsInherentEv(ptr noundef nonnull align 8 dereferenceable(88) %202)
  store ptr %203, ptr %27, align 8, !tbaa !5
  br label %204

204:                                              ; preds = %216, %201
  %205 = load ptr, ptr %27, align 8, !tbaa !5
  %206 = load i8, ptr %26, align 1, !tbaa !9, !range !11, !noundef !12
  %207 = trunc i8 %206 to i1
  br i1 %207, label %209, label %208

208:                                              ; preds = %204
  store i32 39, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %217

209:                                              ; preds = %204
  %210 = load ptr, ptr %27, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %210, i32 0, i32 0
  store ptr %211, ptr %7, align 8, !tbaa !5
  %212 = load ptr, ptr %27, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %212, i32 0, i32 3
  store ptr %213, ptr %8, align 8, !tbaa !5
  %214 = load ptr, ptr %27, align 8, !tbaa !5
  %215 = getelementptr inbounds %"struct.HIR::Path::Data::Data_UfcsInherent", ptr %214, i32 0, i32 2
  store ptr %215, ptr %9, align 8, !tbaa !5
  br label %216

216:                                              ; preds = %209
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %204, !llvm.loop !20

217:                                              ; preds = %208
  br label %218

218:                                              ; preds = %217
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %197, !llvm.loop !21

219:                                              ; preds = %200
  br label %254

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

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

224:                                              ; preds = %221
  store i32 42, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  br label %253

225:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %226 = load ptr, ptr %21, align 8, !tbaa !5
  %227 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR4Path4Data14as_UfcsUnknownEv(ptr noundef nonnull align 8 dereferenceable(88) %226)
  store ptr %227, ptr %29, align 8, !tbaa !5
  br label %228

228:                                              ; preds = %249, %225
  %229 = load ptr, ptr %29, align 8, !tbaa !5
  %230 = load i8, ptr %28, align 1, !tbaa !9, !range !11, !noundef !12
  %231 = trunc i8 %230 to i1
  br i1 %231, label %233, label %232

232:                                              ; preds = %228
  store i32 45, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %251

233:                                              ; preds = %228
  br label %234

234:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %235 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %235)
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 1 dereferenceable(1) %32) #9
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef %31)
          to label %236 unwind label %239

236:                                              ; preds = %234
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  %237 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %237, ptr noundef @.str.30)
          to label %238 unwind label %243

238:                                              ; preds = %236
  call void @__cxa_throw(ptr %237, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #11
  unreachable

239:                                              ; preds = %234
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %18, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %19, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %250

243:                                              ; preds = %236
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %18, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %19, align 4
  call void @__cxa_free_exception(ptr %237) #9
  br label %250

247:                                              ; No predecessors!
  br label %248

248:                                              ; preds = %247
  br label %249

249:                                              ; preds = %248
  store i8 0, ptr %28, align 1, !tbaa !9
  br label %228, !llvm.loop !22

250:                                              ; preds = %243, %239
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  br label %388

251:                                              ; preds = %232
  br label %252

252:                                              ; preds = %251
  store i8 0, ptr %28, align 1, !tbaa !9
  br label %221, !llvm.loop !23

253:                                              ; preds = %224
  br label %254

254:                                              ; preds = %253, %219, %195, %170, %147
  br label %255

255:                                              ; preds = %254
  store i8 0, ptr %20, align 1, !tbaa !9
  br label %143, !llvm.loop !24

256:                                              ; preds = %146
  br label %257

257:                                              ; preds = %256
  store i8 0, ptr %20, align 1, !tbaa !9
  br label %136, !llvm.loop !25

258:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 128, ptr %33) #9
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = load ptr, ptr %8, align 8, !tbaa !5
  %261 = load ptr, ptr %9, align 8, !tbaa !5
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %33, ptr noundef %259, ptr noundef %260, ptr noundef %261, ptr noundef null, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %262 = load ptr, ptr %14, align 8, !tbaa !5
  %263 = load ptr, ptr %262, align 8, !tbaa !5
  store ptr %263, ptr %34, align 8, !tbaa !5
  store i1 false, ptr %35, align 1
  %264 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 8 %264, i8 0, i64 96, i1 false)
  call void @_ZN3HIR13GenericParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %264) #9
  %265 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 1
  %266 = load ptr, ptr %34, align 8, !tbaa !5
  %267 = getelementptr inbounds %"class.HIR::Function", ptr %266, i32 0, i32 5
  %268 = load i8, ptr %267, align 8, !tbaa !26, !range !11, !noundef !12
  %269 = trunc i8 %268 to i1
  %270 = zext i1 %269 to i8
  store i8 %270, ptr %265, align 8, !tbaa !71
  %271 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 2
  %272 = load ptr, ptr %34, align 8, !tbaa !5
  %273 = getelementptr inbounds %"class.HIR::Function", ptr %272, i32 0, i32 9
  %274 = load i8, ptr %273, align 8, !tbaa !73, !range !11, !noundef !12
  %275 = trunc i8 %274 to i1
  %276 = zext i1 %275 to i8
  store i8 %276, ptr %271, align 1, !tbaa !74
  %277 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 3
  %278 = load ptr, ptr %34, align 8, !tbaa !5
  %279 = getelementptr inbounds %"class.HIR::Function", ptr %278, i32 0, i32 4
  invoke void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %277, ptr noundef nonnull align 8 dereferenceable(8) %279)
          to label %280 unwind label %312

280:                                              ; preds = %258
  %281 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 4
  %282 = load ptr, ptr %6, align 8, !tbaa !5
  %283 = load ptr, ptr %34, align 8, !tbaa !5
  %284 = getelementptr inbounds %"class.HIR::Function", ptr %283, i32 0, i32 10
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %281, ptr noundef nonnull align 8 dereferenceable(96) %33, ptr noundef nonnull align 8 dereferenceable(8) %282, ptr noundef nonnull align 8 dereferenceable(8) %284, i1 noundef zeroext true)
          to label %285 unwind label %316

285:                                              ; preds = %280
  %286 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 5
  call void @llvm.memset.p0.i64(ptr align 8 %286, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %286) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #9
  invoke void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %36)
          to label %287 unwind label %321

287:                                              ; preds = %285
  %288 = load ptr, ptr %34, align 8, !tbaa !5
  %289 = getelementptr inbounds %"class.HIR::Function", ptr %288, i32 0, i32 7
  %290 = getelementptr inbounds %"class.HIR::GenericParams", ptr %289, i32 0, i32 1
  %291 = call noundef zeroext i1 @_ZNKSt6vectorIN3HIR11LifetimeDefESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %290) #9
  br i1 %291, label %347, label %292

292:                                              ; preds = %287
  %293 = load ptr, ptr %34, align 8, !tbaa !5
  %294 = getelementptr inbounds %"class.HIR::Function", ptr %293, i32 0, i32 7
  %295 = getelementptr inbounds %"class.HIR::GenericParams", ptr %294, i32 0, i32 1
  %296 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 0
  %297 = getelementptr inbounds %"class.HIR::GenericParams", ptr %296, i32 0, i32 1
  %298 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIN3HIR11LifetimeDefESaIS1_EEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %297, ptr noundef nonnull align 8 dereferenceable(24) %295)
          to label %299 unwind label %325

299:                                              ; preds = %292
  call void @llvm.lifetime.start.p0(i64 24, ptr %37) #9
  %300 = getelementptr inbounds %struct.MonomorphStatePtr, ptr %33, i32 0, i32 3
  %301 = load ptr, ptr %300, align 8, !tbaa !75
  invoke void @_ZNK3HIR10PathParams5cloneEv(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8 %37, ptr noundef nonnull align 8 dereferenceable(24) %301)
          to label %302 unwind label %329

302:                                              ; preds = %299
  %303 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR10PathParamsaSEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %36, ptr noundef nonnull align 8 dereferenceable(24) %37)
          to label %304 unwind label %333

304:                                              ; preds = %302
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %38) #9
  %305 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 0
  invoke void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8 %38, ptr noundef nonnull align 8 dereferenceable(96) %305, i32 noundef 3, i1 noundef zeroext true)
          to label %306 unwind label %338

306:                                              ; preds = %304
  %307 = getelementptr inbounds %"struct.HIR::PathParams", ptr %38, i32 0, i32 0
  %308 = getelementptr inbounds %"struct.HIR::PathParams", ptr %36, i32 0, i32 0
  %309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN10ThinVectorIN3HIR11LifetimeRefEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(8) %308, ptr noundef nonnull align 8 dereferenceable(8) %307)
          to label %310 unwind label %342

310:                                              ; preds = %306
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #9
  %311 = getelementptr inbounds %struct.MonomorphStatePtr, ptr %33, i32 0, i32 3
  store ptr %36, ptr %311, align 8, !tbaa !75
  br label %347

312:                                              ; preds = %258
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %18, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %19, align 4
  br label %320

316:                                              ; preds = %280
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %18, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %19, align 4
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %277) #9
  br label %320

320:                                              ; preds = %316, %312
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %264) #9
  br label %384

321:                                              ; preds = %285
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %18, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %19, align 4
  br label %381

325:                                              ; preds = %292
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %18, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %19, align 4
  br label %380

329:                                              ; preds = %299
  %330 = landingpad { ptr, i32 }
          cleanup
  %331 = extractvalue { ptr, i32 } %330, 0
  store ptr %331, ptr %18, align 8
  %332 = extractvalue { ptr, i32 } %330, 1
  store i32 %332, ptr %19, align 4
  br label %337

333:                                              ; preds = %302
  %334 = landingpad { ptr, i32 }
          cleanup
  %335 = extractvalue { ptr, i32 } %334, 0
  store ptr %335, ptr %18, align 8
  %336 = extractvalue { ptr, i32 } %334, 1
  store i32 %336, ptr %19, align 4
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  br label %337

337:                                              ; preds = %333, %329
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #9
  br label %380

338:                                              ; preds = %304
  %339 = landingpad { ptr, i32 }
          cleanup
  %340 = extractvalue { ptr, i32 } %339, 0
  store ptr %340, ptr %18, align 8
  %341 = extractvalue { ptr, i32 } %339, 1
  store i32 %341, ptr %19, align 4
  br label %346

342:                                              ; preds = %306
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %18, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %19, align 4
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #9
  br label %346

346:                                              ; preds = %342, %338
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #9
  br label %380

347:                                              ; preds = %310, %287
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %348 = load ptr, ptr %34, align 8, !tbaa !5
  %349 = getelementptr inbounds %"class.HIR::Function", ptr %348, i32 0, i32 8
  store ptr %349, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  %350 = load ptr, ptr %39, align 8, !tbaa !5
  %351 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %350) #9
  %352 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %40, i32 0, i32 0
  store ptr %351, ptr %352, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %353 = load ptr, ptr %39, align 8, !tbaa !5
  %354 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %353) #9
  %355 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %41, i32 0, i32 0
  store ptr %354, ptr %355, align 8
  br label %356

356:                                              ; preds = %367, %347
  %357 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #9
  br i1 %357, label %359, label %358

358:                                              ; preds = %356
  store i32 50, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %378

359:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %360 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #9
  store ptr %360, ptr %42, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %362 = load ptr, ptr %6, align 8, !tbaa !5
  %363 = load ptr, ptr %42, align 8, !tbaa !5
  %364 = getelementptr inbounds %"struct.std::pair", ptr %363, i32 0, i32 1
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %43, ptr noundef nonnull align 8 dereferenceable(96) %33, ptr noundef nonnull align 8 dereferenceable(8) %362, ptr noundef nonnull align 8 dereferenceable(8) %364, i1 noundef zeroext true)
          to label %365 unwind label %369

365:                                              ; preds = %359
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %361, ptr noundef nonnull align 8 dereferenceable(8) %43)
          to label %366 unwind label %373

366:                                              ; preds = %365
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %367

367:                                              ; preds = %366
  %368 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #9
  br label %356

369:                                              ; preds = %359
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %18, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %19, align 4
  br label %377

373:                                              ; preds = %365
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %18, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %19, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %43) #9
  br label %377

377:                                              ; preds = %373, %369
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %380

378:                                              ; preds = %358
  store i1 true, ptr %35, align 1
  store i32 1, ptr %11, align 4
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #9
  %379 = load i1, ptr %35, align 1
  br i1 %379, label %383, label %382

380:                                              ; preds = %377, %346, %337, %325
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #9
  br label %381

381:                                              ; preds = %380, %321
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #9
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #9
  br label %384

382:                                              ; preds = %378
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #9
  br label %383

383:                                              ; preds = %382, %378
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %33) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %33) #9
  br label %386

384:                                              ; preds = %381, %320
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %33) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %33) #9
  br label %388

385:                                              ; No predecessors!
  store i8 0, ptr %13, align 1, !tbaa !9
  br label %109, !llvm.loop !84

386:                                              ; preds = %383, %113
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  %387 = load i32, ptr %11, align 4
  switch i32 %387, label %391 [
    i32 12, label %389
  ]

388:                                              ; preds = %384, %250, %129, %125
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #9
  br label %703

389:                                              ; preds = %386
  br label %390

390:                                              ; preds = %389
  store i8 0, ptr %13, align 1, !tbaa !9
  br label %102, !llvm.loop !85

391:                                              ; preds = %386, %105
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #9
  %392 = load i32, ptr %11, align 4
  switch i32 %392, label %701 [
    i32 9, label %393
  ]

393:                                              ; preds = %391
  br label %699

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

395:                                              ; preds = %587, %394
  %396 = load i8, ptr %44, align 1, !tbaa !9, !range !11, !noundef !12
  %397 = trunc i8 %396 to i1
  br i1 %397, label %399, label %398

398:                                              ; preds = %395
  store i32 52, ptr %11, align 4
  br label %588

399:                                              ; preds = %395
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %400 = load ptr, ptr %12, align 8, !tbaa !5
  %401 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR25TypeData_NamedFunction_Ty18as_EnumConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %400)
  store ptr %401, ptr %45, align 8, !tbaa !5
  br label %402

402:                                              ; preds = %583, %399
  %403 = load ptr, ptr %45, align 8, !tbaa !5
  %404 = load i8, ptr %44, align 1, !tbaa !9, !range !11, !noundef !12
  %405 = trunc i8 %404 to i1
  br i1 %405, label %407, label %406

406:                                              ; preds = %402
  store i32 55, ptr %11, align 4
  br label %584

407:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %408 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %86, i32 0, i32 0
  %409 = getelementptr inbounds %"class.HIR::Path", ptr %408, i32 0, i32 0
  %410 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %409)
  store ptr %410, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr %47) #9
  %411 = load ptr, ptr %46, align 8, !tbaa !5
  %412 = getelementptr inbounds %"class.HIR::GenericPath", ptr %411, i32 0, i32 1
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %47, ptr noundef null, ptr noundef %412, ptr noundef null, ptr noundef null, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %413 = load ptr, ptr %46, align 8, !tbaa !5
  %414 = getelementptr inbounds %"class.HIR::GenericPath", ptr %413, i32 0, i32 0
  invoke void @_ZNK3HIR10SimplePath6parentEv(ptr dead_on_unwind writable sret(%"struct.HIR::SimplePath") align 8 %48, ptr noundef nonnull align 8 dereferenceable(8) %414)
          to label %415 unwind label %431

415:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %416 = load ptr, ptr %45, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor", ptr %416, i32 0, i32 0
  %418 = load ptr, ptr %417, align 8, !tbaa !86
  store ptr %418, ptr %49, align 8, !tbaa !5
  br label %419

419:                                              ; preds = %415
  %420 = load ptr, ptr %49, align 8, !tbaa !5
  %421 = getelementptr inbounds %"class.HIR::Enum", ptr %420, i32 0, i32 3
  %422 = invoke noundef zeroext i1 @_ZNK3HIR4Enum5Class7is_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %421)
          to label %423 unwind label %435

423:                                              ; preds = %419
  br i1 %422, label %452, label %424

424:                                              ; preds = %423
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %425 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull align 8 dereferenceable(8) %425)
          to label %426 unwind label %439

426:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %427 = getelementptr inbounds %class.anon.97, ptr %52, i32 0, i32 0
  store ptr %48, ptr %427, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(8) %52) #9
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef %51)
          to label %428 unwind label %443

428:                                              ; preds = %426
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  %429 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %429, ptr noundef @.str.30)
          to label %430 unwind label %448

430:                                              ; preds = %428
  invoke void @__cxa_throw(ptr %429, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #11
          to label %731 unwind label %435

431:                                              ; preds = %407
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %18, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %19, align 4
  br label %582

435:                                              ; preds = %430, %419
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %18, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %19, align 4
  br label %581

439:                                              ; preds = %424
  %440 = landingpad { ptr, i32 }
          cleanup
  %441 = extractvalue { ptr, i32 } %440, 0
  store ptr %441, ptr %18, align 8
  %442 = extractvalue { ptr, i32 } %440, 1
  store i32 %442, ptr %19, align 4
  br label %447

443:                                              ; preds = %426
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %18, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %19, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #9
  br label %447

447:                                              ; preds = %443, %439
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %581

448:                                              ; preds = %428
  %449 = landingpad { ptr, i32 }
          cleanup
  %450 = extractvalue { ptr, i32 } %449, 0
  store ptr %450, ptr %18, align 8
  %451 = extractvalue { ptr, i32 } %449, 1
  store i32 %451, ptr %19, align 4
  call void @__cxa_free_exception(ptr %429) #9
  br label %581

452:                                              ; preds = %423
  br label %453

453:                                              ; preds = %452
  br label %454

454:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %455 = load ptr, ptr %49, align 8, !tbaa !5
  %456 = getelementptr inbounds %"class.HIR::Enum", ptr %455, i32 0, i32 3
  %457 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR4Enum5Class7as_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %456)
          to label %458 unwind label %503

458:                                              ; preds = %454
  %459 = load ptr, ptr %45, align 8, !tbaa !5
  %460 = getelementptr inbounds %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor", ptr %459, i32 0, i32 1
  %461 = load i64, ptr %460, align 8, !tbaa !88
  %462 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %457, i64 noundef %461) #9
  %463 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %462, i32 0, i32 2
  store ptr %463, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  %464 = load ptr, ptr %53, align 8, !tbaa !5
  %465 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %464)
          to label %466 unwind label %507

466:                                              ; preds = %458
  %467 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %465)
          to label %468 unwind label %507

468:                                              ; preds = %466
  %469 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %467, i32 0, i32 1
  %470 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %469)
          to label %471 unwind label %507

471:                                              ; preds = %468
  %472 = load ptr, ptr %470, align 8, !tbaa !5
  store ptr %472, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %473 = load ptr, ptr %54, align 8, !tbaa !5
  %474 = getelementptr inbounds %"class.HIR::Struct", ptr %473, i32 0, i32 3
  %475 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %474)
          to label %476 unwind label %511

476:                                              ; preds = %471
  store ptr %475, ptr %55, align 8, !tbaa !5
  store i1 false, ptr %56, align 1
  %477 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 8 %477, i8 0, i64 96, i1 false)
  call void @_ZN3HIR13GenericParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %477) #9
  store i1 true, ptr %63, align 1
  %478 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 1
  store i8 0, ptr %478, align 8, !tbaa !71
  %479 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 2
  store i8 0, ptr %479, align 1, !tbaa !74
  %480 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 3
  invoke void @_ZN8RcString12new_internedEPKc(ptr dead_on_unwind writable sret(%class.RcString) align 8 %480, ptr noundef @.str.31)
          to label %481 unwind label %515

481:                                              ; preds = %476
  store i1 true, ptr %62, align 1
  %482 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 4
  invoke void @_ZN3HIR10SimplePathC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %483 unwind label %519

483:                                              ; preds = %481
  %484 = load ptr, ptr %46, align 8, !tbaa !5
  %485 = getelementptr inbounds %"class.HIR::GenericPath", ptr %484, i32 0, i32 1
  invoke void @_ZNK3HIR10PathParams5cloneEv(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8 %60, ptr noundef nonnull align 8 dereferenceable(24) %485)
          to label %486 unwind label %523

486:                                              ; preds = %483
  invoke void @_ZN3HIR11GenericPathC1ENS_10SimplePathENS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef %59, ptr noundef %60)
          to label %487 unwind label %527

487:                                              ; preds = %486
  invoke void @_ZN3HIR4PathC1ENS_11GenericPathE(ptr noundef nonnull align 8 dereferenceable(88) %57, ptr noundef %58)
          to label %488 unwind label %531

488:                                              ; preds = %487
  %489 = load ptr, ptr %49, align 8, !tbaa !5
  invoke void @_ZN3HIR15TypePathBinding9make_EnumEPKNS_4EnumE(ptr dead_on_unwind writable sret(%"class.HIR::TypePathBinding") align 8 %61, ptr noundef %489)
          to label %490 unwind label %535

490:                                              ; preds = %488
  invoke void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %482, ptr noundef %57, ptr noundef %61)
          to label %491 unwind label %539

491:                                              ; preds = %490
  %492 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 5
  call void @llvm.memset.p0.i64(ptr align 8 %492, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %492) #9
  store i1 false, ptr %62, align 1
  store i1 false, ptr %63, align 1
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %61) #9
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %57) #9
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #9
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %493 = load ptr, ptr %55, align 8, !tbaa !5
  store ptr %493, ptr %64, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  %494 = load ptr, ptr %64, align 8, !tbaa !5
  %495 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %494) #9
  %496 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.134", ptr %65, i32 0, i32 0
  store ptr %495, ptr %496, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %497 = load ptr, ptr %64, align 8, !tbaa !5
  %498 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %497) #9
  %499 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.134", ptr %66, i32 0, i32 0
  store ptr %498, ptr %499, align 8
  br label %500

500:                                              ; preds = %563, %491
  %501 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 8 dereferenceable(8) %66) #9
  br i1 %501, label %555, label %502

502:                                              ; preds = %500
  store i32 60, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  br label %574

503:                                              ; preds = %454
  %504 = landingpad { ptr, i32 }
          cleanup
  %505 = extractvalue { ptr, i32 } %504, 0
  store ptr %505, ptr %18, align 8
  %506 = extractvalue { ptr, i32 } %504, 1
  store i32 %506, ptr %19, align 4
  br label %580

507:                                              ; preds = %468, %466, %458
  %508 = landingpad { ptr, i32 }
          cleanup
  %509 = extractvalue { ptr, i32 } %508, 0
  store ptr %509, ptr %18, align 8
  %510 = extractvalue { ptr, i32 } %508, 1
  store i32 %510, ptr %19, align 4
  br label %579

511:                                              ; preds = %471
  %512 = landingpad { ptr, i32 }
          cleanup
  %513 = extractvalue { ptr, i32 } %512, 0
  store ptr %513, ptr %18, align 8
  %514 = extractvalue { ptr, i32 } %512, 1
  store i32 %514, ptr %19, align 4
  br label %578

515:                                              ; preds = %476
  %516 = landingpad { ptr, i32 }
          cleanup
  %517 = extractvalue { ptr, i32 } %516, 0
  store ptr %517, ptr %18, align 8
  %518 = extractvalue { ptr, i32 } %516, 1
  store i32 %518, ptr %19, align 4
  br label %551

519:                                              ; preds = %481
  %520 = landingpad { ptr, i32 }
          cleanup
  %521 = extractvalue { ptr, i32 } %520, 0
  store ptr %521, ptr %18, align 8
  %522 = extractvalue { ptr, i32 } %520, 1
  store i32 %522, ptr %19, align 4
  br label %547

523:                                              ; preds = %483
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %18, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %19, align 4
  br label %546

527:                                              ; preds = %486
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %18, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %19, align 4
  br label %545

531:                                              ; preds = %487
  %532 = landingpad { ptr, i32 }
          cleanup
  %533 = extractvalue { ptr, i32 } %532, 0
  store ptr %533, ptr %18, align 8
  %534 = extractvalue { ptr, i32 } %532, 1
  store i32 %534, ptr %19, align 4
  br label %544

535:                                              ; preds = %488
  %536 = landingpad { ptr, i32 }
          cleanup
  %537 = extractvalue { ptr, i32 } %536, 0
  store ptr %537, ptr %18, align 8
  %538 = extractvalue { ptr, i32 } %536, 1
  store i32 %538, ptr %19, align 4
  br label %543

539:                                              ; preds = %490
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %18, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %19, align 4
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %61) #9
  br label %543

543:                                              ; preds = %539, %535
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %57) #9
  br label %544

544:                                              ; preds = %543, %531
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  br label %545

545:                                              ; preds = %544, %527
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #9
  br label %546

546:                                              ; preds = %545, %523
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #9
  br label %547

547:                                              ; preds = %546, %519
  %548 = load i1, ptr %62, align 1
  br i1 %548, label %549, label %550

549:                                              ; preds = %547
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %480) #9
  br label %550

550:                                              ; preds = %549, %547
  br label %551

551:                                              ; preds = %550, %515
  %552 = load i1, ptr %63, align 1
  br i1 %552, label %553, label %554

553:                                              ; preds = %551
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %477) #9
  br label %554

554:                                              ; preds = %553, %551
  br label %578

555:                                              ; preds = %500
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %556 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %65) #9
  store ptr %556, ptr %67, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %558 = load ptr, ptr %6, align 8, !tbaa !5
  %559 = load ptr, ptr %67, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %559, i32 0, i32 1
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %68, ptr noundef nonnull align 8 dereferenceable(96) %47, ptr noundef nonnull align 8 dereferenceable(8) %558, ptr noundef nonnull align 8 dereferenceable(8) %560, i1 noundef zeroext true)
          to label %561 unwind label %565

561:                                              ; preds = %555
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %557, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %562 unwind label %569

562:                                              ; preds = %561
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  br label %563

563:                                              ; preds = %562
  %564 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %65) #9
  br label %500

565:                                              ; preds = %555
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %18, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %19, align 4
  br label %573

569:                                              ; preds = %561
  %570 = landingpad { ptr, i32 }
          cleanup
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %18, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %19, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #9
  br label %573

573:                                              ; preds = %569, %565
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #9
  br label %578

574:                                              ; preds = %502
  store i1 true, ptr %56, align 1
  store i32 1, ptr %11, align 4
  %575 = load i1, ptr %56, align 1
  br i1 %575, label %577, label %576

576:                                              ; preds = %574
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #9
  br label %577

577:                                              ; preds = %576, %574
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %47) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  br label %584

578:                                              ; preds = %573, %554, %511
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %579

579:                                              ; preds = %578, %507
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  br label %580

580:                                              ; preds = %579, %503
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %581

581:                                              ; preds = %580, %448, %447, %435
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %48) #9
  br label %582

582:                                              ; preds = %581, %431
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %47) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #9
  br label %703

583:                                              ; No predecessors!
  store i8 0, ptr %44, align 1, !tbaa !9
  br label %402, !llvm.loop !89

584:                                              ; preds = %577, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  %585 = load i32, ptr %11, align 4
  switch i32 %585, label %588 [
    i32 55, label %586
  ]

586:                                              ; preds = %584
  br label %587

587:                                              ; preds = %586
  store i8 0, ptr %44, align 1, !tbaa !9
  br label %395, !llvm.loop !90

588:                                              ; preds = %584, %398
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #9
  %589 = load i32, ptr %11, align 4
  switch i32 %589, label %701 [
    i32 52, label %590
  ]

590:                                              ; preds = %588
  br label %699

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

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

595:                                              ; preds = %592
  store i32 62, ptr %11, align 4
  br label %696

596:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %597 = load ptr, ptr %12, align 8, !tbaa !5
  %598 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_NamedFunction_Ty20as_StructConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %597)
  store ptr %598, ptr %70, align 8, !tbaa !5
  br label %599

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

603:                                              ; preds = %599
  store i32 65, ptr %11, align 4
  br label %692

604:                                              ; preds = %599
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %605 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %86, i32 0, i32 0
  %606 = getelementptr inbounds %"class.HIR::Path", ptr %605, i32 0, i32 0
  %607 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %606)
  store ptr %607, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr %72) #9
  %608 = load ptr, ptr %71, align 8, !tbaa !5
  %609 = getelementptr inbounds %"class.HIR::GenericPath", ptr %608, i32 0, i32 1
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %72, ptr noundef null, ptr noundef %609, ptr noundef null, ptr noundef null, ptr noundef null)
  store i1 false, ptr %73, align 1
  %610 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 8 %610, i8 0, i64 96, i1 false)
  call void @_ZN3HIR13GenericParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %610) #9
  store i1 true, ptr %77, align 1
  %611 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 1
  store i8 0, ptr %611, align 8, !tbaa !71
  %612 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 2
  store i8 0, ptr %612, align 1, !tbaa !74
  %613 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 3
  invoke void @_ZN8RcString12new_internedEPKc(ptr dead_on_unwind writable sret(%class.RcString) align 8 %613, ptr noundef @.str.31)
          to label %614 unwind label %637

614:                                              ; preds = %604
  store i1 true, ptr %76, align 1
  %615 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 4
  %616 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %86, i32 0, i32 0
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %74, ptr noundef nonnull align 8 dereferenceable(88) %616)
          to label %617 unwind label %641

617:                                              ; preds = %614
  %618 = load ptr, ptr %70, align 8, !tbaa !5
  %619 = load ptr, ptr %618, align 8, !tbaa !5
  invoke void @_ZN3HIR15TypePathBinding11make_StructEPKNS_6StructE(ptr dead_on_unwind writable sret(%"class.HIR::TypePathBinding") align 8 %75, ptr noundef %619)
          to label %620 unwind label %645

620:                                              ; preds = %617
  invoke void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %615, ptr noundef %74, ptr noundef %75)
          to label %621 unwind label %649

621:                                              ; preds = %620
  %622 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 5
  call void @llvm.memset.p0.i64(ptr align 8 %622, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %622) #9
  store i1 false, ptr %76, align 1
  store i1 false, ptr %77, align 1
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %75) #9
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %74) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  %623 = load ptr, ptr %70, align 8, !tbaa !5
  %624 = load ptr, ptr %623, align 8, !tbaa !5
  %625 = getelementptr inbounds %"class.HIR::Struct", ptr %624, i32 0, i32 3
  %626 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %625)
          to label %627 unwind label %662

627:                                              ; preds = %621
  store ptr %626, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #9
  %628 = load ptr, ptr %78, align 8, !tbaa !5
  %629 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %628) #9
  %630 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.134", ptr %79, i32 0, i32 0
  store ptr %629, ptr %630, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #9
  %631 = load ptr, ptr %78, align 8, !tbaa !5
  %632 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %631) #9
  %633 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.134", ptr %80, i32 0, i32 0
  store ptr %632, ptr %633, align 8
  br label %634

634:                                              ; preds = %674, %627
  %635 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %80) #9
  br i1 %635, label %666, label %636

636:                                              ; preds = %634
  store i32 68, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  br label %686

637:                                              ; preds = %604
  %638 = landingpad { ptr, i32 }
          cleanup
  %639 = extractvalue { ptr, i32 } %638, 0
  store ptr %639, ptr %18, align 8
  %640 = extractvalue { ptr, i32 } %638, 1
  store i32 %640, ptr %19, align 4
  br label %658

641:                                              ; preds = %614
  %642 = landingpad { ptr, i32 }
          cleanup
  %643 = extractvalue { ptr, i32 } %642, 0
  store ptr %643, ptr %18, align 8
  %644 = extractvalue { ptr, i32 } %642, 1
  store i32 %644, ptr %19, align 4
  br label %654

645:                                              ; preds = %617
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %18, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %19, align 4
  br label %653

649:                                              ; preds = %620
  %650 = landingpad { ptr, i32 }
          cleanup
  %651 = extractvalue { ptr, i32 } %650, 0
  store ptr %651, ptr %18, align 8
  %652 = extractvalue { ptr, i32 } %650, 1
  store i32 %652, ptr %19, align 4
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %75) #9
  br label %653

653:                                              ; preds = %649, %645
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %74) #9
  br label %654

654:                                              ; preds = %653, %641
  %655 = load i1, ptr %76, align 1
  br i1 %655, label %656, label %657

656:                                              ; preds = %654
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %613) #9
  br label %657

657:                                              ; preds = %656, %654
  br label %658

658:                                              ; preds = %657, %637
  %659 = load i1, ptr %77, align 1
  br i1 %659, label %660, label %661

660:                                              ; preds = %658
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %610) #9
  br label %661

661:                                              ; preds = %660, %658
  br label %690

662:                                              ; preds = %621
  %663 = landingpad { ptr, i32 }
          cleanup
  %664 = extractvalue { ptr, i32 } %663, 0
  store ptr %664, ptr %18, align 8
  %665 = extractvalue { ptr, i32 } %663, 1
  store i32 %665, ptr %19, align 4
  br label %685

666:                                              ; preds = %634
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #9
  %667 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %79) #9
  store ptr %667, ptr %81, align 8, !tbaa !5
  %668 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %0, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #9
  %669 = load ptr, ptr %6, align 8, !tbaa !5
  %670 = load ptr, ptr %81, align 8, !tbaa !5
  %671 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %670, i32 0, i32 1
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %82, ptr noundef nonnull align 8 dereferenceable(96) %72, ptr noundef nonnull align 8 dereferenceable(8) %669, ptr noundef nonnull align 8 dereferenceable(8) %671, i1 noundef zeroext true)
          to label %672 unwind label %676

672:                                              ; preds = %666
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %668, ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %673 unwind label %680

673:                                              ; preds = %672
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %82) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #9
  br label %674

674:                                              ; preds = %673
  %675 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %79) #9
  br label %634

676:                                              ; preds = %666
  %677 = landingpad { ptr, i32 }
          cleanup
  %678 = extractvalue { ptr, i32 } %677, 0
  store ptr %678, ptr %18, align 8
  %679 = extractvalue { ptr, i32 } %677, 1
  store i32 %679, ptr %19, align 4
  br label %684

680:                                              ; preds = %672
  %681 = landingpad { ptr, i32 }
          cleanup
  %682 = extractvalue { ptr, i32 } %681, 0
  store ptr %682, ptr %18, align 8
  %683 = extractvalue { ptr, i32 } %681, 1
  store i32 %683, ptr %19, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %82) #9
  br label %684

684:                                              ; preds = %680, %676
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  br label %685

685:                                              ; preds = %684, %662
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #9
  br label %690

686:                                              ; preds = %636
  store i1 true, ptr %73, align 1
  store i32 1, ptr %11, align 4
  %687 = load i1, ptr %73, align 1
  br i1 %687, label %689, label %688

688:                                              ; preds = %686
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #9
  br label %689

689:                                              ; preds = %688, %686
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %72) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  br label %692

690:                                              ; preds = %685, %661
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %72) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #9
  br label %703

691:                                              ; No predecessors!
  store i8 0, ptr %69, align 1, !tbaa !9
  br label %599, !llvm.loop !91

692:                                              ; preds = %689, %603
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  %693 = load i32, ptr %11, align 4
  switch i32 %693, label %696 [
    i32 65, label %694
  ]

694:                                              ; preds = %692
  br label %695

695:                                              ; preds = %694
  store i8 0, ptr %69, align 1, !tbaa !9
  br label %592, !llvm.loop !92

696:                                              ; preds = %692, %595
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #9
  %697 = load i32, ptr %11, align 4
  switch i32 %697, label %701 [
    i32 62, label %698
  ]

698:                                              ; preds = %696
  br label %699

699:                                              ; preds = %698, %590, %393, %97
  br label %700

700:                                              ; preds = %699
  store i8 0, ptr %10, align 1, !tbaa !9
  br label %93, !llvm.loop !93

701:                                              ; preds = %696, %588, %391, %96
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  %702 = load i32, ptr %11, align 4
  switch i32 %702, label %706 [
    i32 5, label %704
  ]

703:                                              ; preds = %690, %582, %388
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  br label %725

704:                                              ; preds = %701
  br label %705

705:                                              ; preds = %704
  store i8 0, ptr %10, align 1, !tbaa !9
  br label %87, !llvm.loop !94

706:                                              ; preds = %701, %90
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  %707 = load i32, ptr %11, align 4
  switch i32 %707, label %724 [
    i32 2, label %708
  ]

708:                                              ; preds = %706
  br label %709

709:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #9
  %710 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %83, ptr noundef nonnull align 8 dereferenceable(8) %710)
  call void @llvm.lifetime.start.p0(i64 1, ptr %85) #9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef nonnull align 1 dereferenceable(1) %85) #9
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %83, ptr noundef %84)
          to label %711 unwind label %714

711:                                              ; preds = %709
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %83) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #9
  %712 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %712, ptr noundef @.str.30)
          to label %713 unwind label %718

713:                                              ; preds = %711
  call void @__cxa_throw(ptr %712, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #11
  unreachable

714:                                              ; preds = %709
  %715 = landingpad { ptr, i32 }
          cleanup
  %716 = extractvalue { ptr, i32 } %715, 0
  store ptr %716, ptr %18, align 8
  %717 = extractvalue { ptr, i32 } %715, 1
  store i32 %717, ptr %19, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %83) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #9
  br label %725

718:                                              ; preds = %711
  %719 = landingpad { ptr, i32 }
          cleanup
  %720 = extractvalue { ptr, i32 } %719, 0
  store ptr %720, ptr %18, align 8
  %721 = extractvalue { ptr, i32 } %719, 1
  store i32 %721, ptr %19, align 4
  call void @__cxa_free_exception(ptr %712) #9
  br label %725

722:                                              ; No predecessors!
  br label %723

723:                                              ; preds = %722
  unreachable

724:                                              ; preds = %706
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  ret void

725:                                              ; preds = %718, %714, %703
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  br label %726

726:                                              ; preds = %725
  %727 = load ptr, ptr %18, align 8
  %728 = load i32, ptr %19, align 4
  %729 = insertvalue { ptr, i32 } poison, ptr %727, 0
  %730 = insertvalue { ptr, i32 } %729, i32 %728, 1
  resume { ptr, i32 } %730

731:                                              ; preds = %430
  unreachable
}

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

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

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

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

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

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

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

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

declare void @__cxa_free_exception(ptr)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8, ptr noundef nonnull align 8 dereferenceable(96), i32 noundef, i1 noundef zeroext) #5

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

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

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

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

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

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

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

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

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

declare void @_ZNK3HIR10SimplePath6parentEv(ptr dead_on_unwind writable sret(%"struct.HIR::SimplePath") align 8, ptr noundef nonnull align 8 dereferenceable(8)) #5

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8RcString12new_internedEPKc(ptr dead_on_unwind noalias writable sret(%class.RcString) align 8, ptr noundef) #3 align 2

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

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

declare void @_ZN3HIR11GenericPathC1ENS_10SimplePathENS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef) unnamed_addr #5

declare void @_ZN3HIR4PathC1ENS_11GenericPathE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef) unnamed_addr #5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTSZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_0", !6, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = !{!27, !10, i64 104}
!27 = !{!"_ZTSN3HIR8FunctionE", !10, i64 0, !28, i64 8, !33, i64 80, !34, i64 88, !35, i64 96, !10, i64 104, !10, i64 105, !36, i64 112, !53, i64 208, !10, i64 232, !34, i64 240, !57, i64 248, !65, i64 320}
!28 = !{!"_ZTSN3HIR7LinkageE", !29, i64 0, !30, i64 8, !30, i64 40}
!29 = !{!"_ZTSN3HIR7Linkage4TypeE", !7, i64 0}
!30 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !31, i64 0, !32, i64 8, !7, i64 16}
!31 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!32 = !{!"long", !7, i64 0}
!33 = !{!"_ZTSN3HIR8Function8ReceiverE", !7, i64 0}
!34 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!35 = !{!"_ZTS8RcString", !6, i64 0}
!36 = !{!"_ZTSN3HIR13GenericParamsE", !37, i64 0, !41, i64 24, !45, i64 48, !49, i64 72}
!37 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!41 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !42, i64 0}
!42 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!45 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !46, i64 0}
!46 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!49 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !50, i64 0}
!50 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!53 = !{!"_ZTSSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !54, i64 0}
!54 = !{!"_ZTSSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !55, i64 0}
!55 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE12_Vector_implE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!57 = !{!"_ZTSN3HIR7ExprPtrE", !58, i64 0, !59, i64 8, !59, i64 32, !63, i64 56, !64, i64 64}
!58 = !{!"_ZTSN3HIR12ExprPtrInnerE", !6, i64 0}
!59 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!63 = !{!"_ZTSN3MIR15FunctionPointerE", !6, i64 0}
!64 = !{!"_ZTSN3HIR12ExprStatePtrE", !6, i64 0}
!65 = !{!"_ZTSN3HIR8Function8MarkingsE", !66, i64 0, !10, i64 24, !70, i64 28}
!66 = !{!"_ZTSSt6vectorIjSaIjEE", !67, i64 0}
!67 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!70 = !{!"_ZTSN3HIR8Function8Markings6InlineE", !7, i64 0}
!71 = !{!72, !10, i64 96}
!72 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !36, i64 0, !10, i64 96, !10, i64 97, !35, i64 104, !34, i64 112, !59, i64 120}
!73 = !{!27, !10, i64 232}
!74 = !{!72, !10, i64 97}
!75 = !{!76, !6, i64 112}
!76 = !{!"_ZTS17MonomorphStatePtr", !77, i64 0, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120}
!77 = !{!"_ZTS15MonomorphiserPP", !78, i64 0}
!78 = !{!"_ZTS13Monomorphiser", !6, i64 8, !79, i64 16, !80, i64 72}
!79 = !{!"_ZTSN3HIR8ItemPathE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!80 = !{!"_ZTSSt6vectorIPKN3HIR13GenericParamsESaIS3_EE", !81, i64 0}
!81 = !{!"_ZTSSt12_Vector_baseIPKN3HIR13GenericParamsESaIS3_EE", !82, i64 0}
!82 = !{!"_ZTSNSt12_Vector_baseIPKN3HIR13GenericParamsESaIS3_EE12_Vector_implE", !83, i64 0}
!83 = !{!"_ZTSNSt12_Vector_baseIPKN3HIR13GenericParamsESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!84 = distinct !{!84, !16}
!85 = distinct !{!85, !16}
!86 = !{!87, !6, i64 0}
!87 = !{!"_ZTSN3HIR25TypeData_NamedFunction_Ty20Data_EnumConstructorE", !6, i64 0, !32, i64 8}
!88 = !{!87, !32, i64 8}
!89 = distinct !{!89, !16}
!90 = distinct !{!90, !16}
!91 = distinct !{!91, !16}
!92 = distinct !{!92, !16}
!93 = distinct !{!93, !16}
!94 = distinct !{!94, !16}


; 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.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.17" }
%"class.HIR::GenericParams" = type { %"class.std::vector", %"class.std::vector.2", %"class.std::vector.7", %"class.std::vector.12" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.2" = type { %"struct.std::_Vector_base.3" }
%"struct.std::_Vector_base.3" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.7" = type { %"struct.std::_Vector_base.8" }
%"struct.std::_Vector_base.8" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.12" = type { %"struct.std::_Vector_base.13" }
%"struct.std::_Vector_base.13" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.RcString = type { ptr }
%"class.HIR::TypeRef" = type { ptr }
%"class.std::vector.17" = type { %"struct.std::_Vector_base.18" }
%"struct.std::_Vector_base.18" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon = type { ptr }
%class.anon.33 = type { i8 }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.34" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.34" = type { %"struct.std::_Vector_base.35" }
%"struct.std::_Vector_base.35" = 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 }
%"struct.HIR::PathParams" = type { %class.ThinVector.22, %class.ThinVector.23, %class.ThinVector.24 }
%class.ThinVector.22 = type { ptr }
%class.ThinVector.23 = type { ptr }
%class.ThinVector.24 = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.anon.97 = type { ptr }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.25" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"class.std::unique_ptr.25" = type { %"struct.std::__uniq_ptr_data.26" }
%"struct.std::__uniq_ptr_data.26" = type { %"class.std::__uniq_ptr_impl.27" }
%"class.std::__uniq_ptr_impl.27" = type { %"class.std::tuple.28" }
%"class.std::tuple.28" = type { %"struct.std::_Tuple_impl.29" }
%"struct.std::_Tuple_impl.29" = type { %"struct.std::_Head_base.32" }
%"struct.std::_Head_base.32" = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.134" = type { ptr }
%class.anon.138 = type { i8 }

@.str.18 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span = external hidden unnamed_addr constant [93 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.31 = external hidden unnamed_addr constant [5 x i8], align 1

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind noalias writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8 %0, ptr noundef nonnull align 8 dereferenceable(112) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
.split515:
  %3 = alloca %struct.Span, align 8
  %4 = alloca %"class.std::function", align 8
  %5 = alloca %class.anon, align 8
  %6 = alloca %struct.Span, align 8
  %7 = alloca %"class.std::function", align 8
  %8 = alloca %class.anon.33, align 1
  %9 = alloca %struct.MonomorphStatePtr, align 8
  %10 = alloca %"struct.HIR::PathParams", align 8
  %11 = alloca %"struct.HIR::PathParams", align 8
  %12 = alloca %"struct.HIR::PathParams", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %15 = alloca %"class.HIR::TypeRef", align 8
  %16 = alloca %struct.MonomorphStatePtr, align 8
  %17 = alloca %"struct.HIR::SimplePath", align 8
  %18 = alloca %struct.Span, align 8
  %19 = alloca %"class.std::function", align 8
  %20 = alloca %class.anon.97, align 8
  %21 = alloca %"class.HIR::Path", align 8
  %22 = alloca %"class.HIR::GenericPath", align 8
  %23 = alloca %"struct.HIR::SimplePath", align 8
  %24 = alloca %"struct.HIR::PathParams", align 8
  %25 = alloca %"class.HIR::TypePathBinding", align 8
  %26 = alloca %"class.__gnu_cxx::__normal_iterator.134", align 8
  %27 = alloca %"class.__gnu_cxx::__normal_iterator.134", align 8
  %28 = alloca %"class.HIR::TypeRef", align 8
  %29 = alloca %struct.MonomorphStatePtr, align 8
  %30 = alloca %"class.HIR::Path", align 8
  %31 = alloca %"class.HIR::TypePathBinding", align 8
  %32 = alloca %"class.__gnu_cxx::__normal_iterator.134", align 8
  %33 = alloca %"class.__gnu_cxx::__normal_iterator.134", align 8
  %34 = alloca %"class.HIR::TypeRef", align 8
  %35 = alloca %struct.Span, align 8
  %36 = alloca %"class.std::function", align 8
  %37 = alloca %class.anon.138, align 1
  %38 = getelementptr inbounds i8, ptr %1, i64 88
  %39 = getelementptr inbounds i8, ptr %0, i64 96
  %40 = getelementptr inbounds i8, ptr %0, i64 97
  %41 = getelementptr inbounds i8, ptr %0, i64 104
  %42 = getelementptr inbounds i8, ptr %0, i64 112
  %43 = getelementptr inbounds i8, ptr %0, i64 120
  %44 = getelementptr inbounds i8, ptr %0, i64 24
  %45 = getelementptr inbounds i8, ptr %9, i64 112
  %46 = tail call noundef i32 @_ZNK3HIR25TypeData_NamedFunction_Ty3tagEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  switch i32 %46, label %.critedge [
    i32 0, label %.loopexit525
    i32 1, label %47
    i32 2, label %127
    i32 3, label %207
  ]

.loopexit525:                                     ; preds = %.split515
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 133, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span) #9
  unreachable

47:                                               ; preds = %.split515
  %48 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_NamedFunction_Ty11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %49 = load ptr, ptr %48, align 8, !tbaa !5
  %.not = icmp eq ptr %49, null
  br i1 %.not, label %51, label %.preheader240

.preheader240:                                    ; preds = %47
  %50 = tail call noundef i32 @_ZNK3HIR4Path4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(88) %1)
  switch i32 %50, label %..loopexit239_crit_edge [
    i32 0, label %.split
    i32 1, label %.preheader
    i32 3, label %.preheader234
    i32 2, label %.preheader236
    i32 4, label %.split359
  ]

51:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #10
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #10
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull %4)
          to label %52 unwind label %55

52:                                               ; preds = %51
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  %53 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %53, ptr noundef nonnull @.str.30)
          to label %54 unwind label %57

54:                                               ; preds = %52
  call void @__cxa_throw(ptr nonnull %53, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #11
  unreachable

55:                                               ; preds = %51
  %56 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  br label %253

57:                                               ; preds = %52
  %58 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %53) #10
  br label %253

.preheader236:                                    ; preds = %.preheader240
  %59 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK3HIR4Path4Data15as_UfcsInherentEv(ptr noundef nonnull align 8 dereferenceable(88) %1)
  %60 = getelementptr inbounds i8, ptr %59, i64 40
  %61 = getelementptr inbounds i8, ptr %59, i64 16
  br label %..loopexit239_crit_edge

.preheader234:                                    ; preds = %.preheader240
  %62 = tail call noundef nonnull align 8 dereferenceable(80) ptr @_ZNK3HIR4Path4Data12as_UfcsKnownEv(ptr noundef nonnull align 8 dereferenceable(88) %1)
  %63 = getelementptr inbounds i8, ptr %62, i64 16
  %64 = getelementptr inbounds i8, ptr %62, i64 48
  br label %..loopexit239_crit_edge

.preheader:                                       ; preds = %.preheader240
  %65 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %1)
  %66 = getelementptr inbounds i8, ptr %65, i64 8
  br label %..loopexit239_crit_edge

.split:                                           ; preds = %.preheader240
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 136, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span) #9
  unreachable

.split359:                                        ; preds = %.preheader240
  %67 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR4Path4Data14as_UfcsUnknownEv(ptr noundef nonnull align 8 dereferenceable(88) %1)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %2)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(1) %8) #10
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull %7)
          to label %68 unwind label %71

68:                                               ; preds = %.split359
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  %69 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %69, ptr noundef nonnull @.str.30)
          to label %70 unwind label %73

70:                                               ; preds = %68
  call void @__cxa_throw(ptr nonnull %69, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #11
  unreachable

71:                                               ; preds = %.split359
  %72 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  br label %253

73:                                               ; preds = %68
  %74 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %69) #10
  br label %253

..loopexit239_crit_edge:                          ; preds = %.preheader, %.preheader236, %.preheader234, %.preheader240
  %.11133 = phi ptr [ null, %.preheader240 ], [ %64, %.preheader234 ], [ %61, %.preheader236 ], [ %66, %.preheader ]
  %.9117 = phi ptr [ null, %.preheader240 ], [ %63, %.preheader234 ], [ %60, %.preheader236 ], [ null, %.preheader ]
  %.9 = phi ptr [ null, %.preheader240 ], [ %62, %.preheader234 ], [ %59, %.preheader236 ], [ null, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %9) #10
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %9, ptr noundef %.9, ptr noundef %.9117, ptr noundef %.11133, ptr noundef null, ptr noundef null)
  %75 = load ptr, ptr %48, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(96) %0, i8 0, i64 96, i1 false)
  call void @_ZN3HIR13GenericParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %0) #10
  %76 = getelementptr inbounds i8, ptr %75, i64 104
  %77 = load i8, ptr %76, align 8, !tbaa !11, !range !57, !noundef !58
  store i8 %77, ptr %39, align 8, !tbaa !59
  %78 = getelementptr inbounds i8, ptr %75, i64 232
  %79 = load i8, ptr %78, align 8, !tbaa !61, !range !57, !noundef !58
  store i8 %79, ptr %40, align 1, !tbaa !62
  %80 = getelementptr inbounds i8, ptr %75, i64 96
  call void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %80)
  %81 = getelementptr inbounds i8, ptr %75, i64 240
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %42, ptr noundef nonnull align 8 dereferenceable(96) %9, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %81, i1 noundef zeroext true)
          to label %82 unwind label %95

82:                                               ; preds = %..loopexit239_crit_edge
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %43, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #10
  invoke void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %83 unwind label %97

83:                                               ; preds = %82
  %84 = getelementptr inbounds i8, ptr %75, i64 136
  %85 = call noundef zeroext i1 @_ZNKSt6vectorIN3HIR11LifetimeDefESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %84) #10
  br i1 %85, label %108, label %86

86:                                               ; preds = %83
  %87 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIN3HIR11LifetimeDefESaIS1_EEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %84)
          to label %88 unwind label %99

88:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #10
  %89 = load ptr, ptr %45, align 8, !tbaa !63
  invoke void @_ZNK3HIR10PathParams5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::PathParams") align 8 %11, ptr noundef nonnull align 8 dereferenceable(24) %89)
          to label %90 unwind label %101

90:                                               ; preds = %88
  %91 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR10PathParamsaSEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %92 unwind label %103

92:                                               ; preds = %90
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #10
  invoke void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::PathParams") align 8 %12, ptr noundef nonnull align 8 dereferenceable(96) %0, i32 noundef 3, i1 noundef zeroext true)
          to label %93 unwind label %106

93:                                               ; preds = %92
  %94 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN10ThinVectorIN3HIR11LifetimeRefEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %12)
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  store ptr %10, ptr %45, align 8, !tbaa !63
  br label %108

95:                                               ; preds = %..loopexit239_crit_edge
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %0) #10
  br label %126

97:                                               ; preds = %82
  %98 = landingpad { ptr, i32 }
          cleanup
  br label %125

99:                                               ; preds = %86
  %100 = landingpad { ptr, i32 }
          cleanup
  br label %124

101:                                              ; preds = %88
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %105

103:                                              ; preds = %90
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  br label %105

105:                                              ; preds = %103, %101
  %.pn219 = phi { ptr, i32 } [ %104, %103 ], [ %102, %101 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  br label %124

106:                                              ; preds = %92
  %107 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  br label %124

108:                                              ; preds = %93, %83
  %109 = getelementptr inbounds i8, ptr %75, i64 208
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #10
  %110 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %109) #10
  store ptr %110, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  %111 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %109) #10
  store ptr %111, ptr %14, align 8
  %112 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  br i1 %112, label %.lr.ph513, label %._crit_edge514

._crit_edge514:                                   ; preds = %116, %108
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #10
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %9) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %9) #10
  br label %252

.lr.ph513:                                        ; preds = %108, %116
  %113 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  %114 = getelementptr inbounds i8, ptr %113, i64 216
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %15, ptr noundef nonnull align 8 dereferenceable(96) %9, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %114, i1 noundef zeroext true)
          to label %115 unwind label %119

115:                                              ; preds = %.lr.ph513
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %43, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %116 unwind label %121

116:                                              ; preds = %115
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  %118 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  br i1 %118, label %.lr.ph513, label %._crit_edge514

119:                                              ; preds = %.lr.ph513
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %123

121:                                              ; preds = %115
  %122 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  br label %123

123:                                              ; preds = %121, %119
  %.pn221 = phi { ptr, i32 } [ %122, %121 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  br label %124

124:                                              ; preds = %123, %106, %105, %99
  %.pn221.pn = phi { ptr, i32 } [ %.pn221, %123 ], [ %107, %106 ], [ %.pn219, %105 ], [ %100, %99 ]
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  br label %125

125:                                              ; preds = %124, %97
  %.pn221.pn.pn = phi { ptr, i32 } [ %.pn221.pn, %124 ], [ %98, %97 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #10
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #10
  br label %126

126:                                              ; preds = %125, %95
  %.pn221.pn.pn.pn = phi { ptr, i32 } [ %.pn221.pn.pn, %125 ], [ %96, %95 ]
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %9) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %9) #10
  br label %253

127:                                              ; preds = %.split515
  %128 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR25TypeData_NamedFunction_Ty18as_EnumConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %129 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %1)
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %16) #10
  %130 = getelementptr inbounds i8, ptr %129, i64 8
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %16, ptr noundef null, ptr noundef nonnull %130, ptr noundef null, ptr noundef null, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #10
  invoke void @_ZNK3HIR10SimplePath6parentEv(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::SimplePath") align 8 %17, ptr noundef nonnull align 8 dereferenceable(8) %129)
          to label %131 unwind label %140

131:                                              ; preds = %127
  %132 = load ptr, ptr %128, align 8, !tbaa !72
  %133 = getelementptr inbounds i8, ptr %132, i64 104
  %134 = call noundef zeroext i1 @_ZNK3HIR4Enum5Class7is_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %133)
  br i1 %134, label %151, label %135

135:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #10
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %2)
          to label %136 unwind label %144

136:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #10
  store ptr %17, ptr %20, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull %19)
          to label %137 unwind label %146

137:                                              ; preds = %136
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  %138 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %138, ptr noundef nonnull @.str.30)
          to label %139 unwind label %149

139:                                              ; preds = %137
  invoke void @__cxa_throw(ptr nonnull %138, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #11
          to label %254 unwind label %142

140:                                              ; preds = %127
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %206

142:                                              ; preds = %139
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %205

144:                                              ; preds = %135
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %148

146:                                              ; preds = %136
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  br label %148

148:                                              ; preds = %146, %144
  %.pn205 = phi { ptr, i32 } [ %147, %146 ], [ %145, %144 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  br label %205

149:                                              ; preds = %137
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %138) #10
  br label %205

151:                                              ; preds = %131
  %152 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR4Enum5Class7as_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %133)
  %153 = getelementptr inbounds i8, ptr %128, i64 8
  %154 = load i64, ptr %153, align 8, !tbaa !74
  %155 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %154) #10
  %156 = getelementptr inbounds i8, ptr %155, i64 16
  %157 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %156)
  %158 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %157)
  %159 = getelementptr inbounds i8, ptr %158, i64 88
  %160 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %159)
  %161 = load ptr, ptr %160, align 8, !tbaa !5
  %162 = getelementptr inbounds i8, ptr %161, i64 104
  %163 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %162)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(96) %0, i8 0, i64 96, i1 false)
  call void @_ZN3HIR13GenericParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %0) #10
  store i8 0, ptr %39, align 8, !tbaa !59
  store i8 0, ptr %40, align 1, !tbaa !62
  invoke void @_ZN8RcString12new_internedEPKc(ptr dead_on_unwind nonnull writable sret(%class.RcString) align 8 %41, ptr noundef nonnull @.str.31)
          to label %164 unwind label %174

164:                                              ; preds = %151
  invoke void @_ZN3HIR10SimplePathC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %165 unwind label %176

165:                                              ; preds = %164
  invoke void @_ZNK3HIR10PathParams5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::PathParams") align 8 %24, ptr noundef nonnull align 8 dereferenceable(24) %130)
          to label %166 unwind label %178

166:                                              ; preds = %165
  invoke void @_ZN3HIR11GenericPathC1ENS_10SimplePathENS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull %23, ptr noundef nonnull %24)
          to label %167 unwind label %180

167:                                              ; preds = %166
  invoke void @_ZN3HIR4PathC1ENS_11GenericPathE(ptr noundef nonnull align 8 dereferenceable(88) %21, ptr noundef nonnull %22)
          to label %168 unwind label %182

168:                                              ; preds = %167
  invoke void @_ZN3HIR15TypePathBinding9make_EnumEPKNS_4EnumE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypePathBinding") align 8 %25, ptr noundef %132)
          to label %169 unwind label %184

169:                                              ; preds = %168
  invoke void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %42, ptr noundef nonnull %21, ptr noundef nonnull %25)
          to label %170 unwind label %186

170:                                              ; preds = %169
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %43, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #10
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #10
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #10
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  %171 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %163) #10
  store ptr %171, ptr %26, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #10
  %172 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %163) #10
  store ptr %172, ptr %27, align 8
  %173 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  br i1 %173, label %.lr.ph282, label %._crit_edge283

._crit_edge283:                                   ; preds = %197, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %16) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %16) #10
  br label %252

174:                                              ; preds = %151
  %175 = landingpad { ptr, i32 }
          cleanup
  br label %193

176:                                              ; preds = %164
  %177 = landingpad { ptr, i32 }
          cleanup
  br label %192

178:                                              ; preds = %165
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %191

180:                                              ; preds = %166
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %190

182:                                              ; preds = %167
  %183 = landingpad { ptr, i32 }
          cleanup
  br label %189

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

186:                                              ; preds = %169
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #10
  br label %188

188:                                              ; preds = %186, %184
  %.pn207 = phi { ptr, i32 } [ %187, %186 ], [ %185, %184 ]
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #10
  br label %189

189:                                              ; preds = %188, %182
  %.pn207.pn = phi { ptr, i32 } [ %.pn207, %188 ], [ %183, %182 ]
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  br label %190

190:                                              ; preds = %189, %180
  %.pn207.pn.pn = phi { ptr, i32 } [ %.pn207.pn, %189 ], [ %181, %180 ]
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  br label %191

191:                                              ; preds = %190, %178
  %.pn207.pn.pn.pn = phi { ptr, i32 } [ %.pn207.pn.pn, %190 ], [ %179, %178 ]
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  br label %192

192:                                              ; preds = %176, %191
  %.pn207.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn207.pn.pn.pn, %191 ], [ %177, %176 ]
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  br label %193

193:                                              ; preds = %174, %192
  %.pn207.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn207.pn.pn.pn.pn, %192 ], [ %175, %174 ]
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %0) #10
  br label %205

.lr.ph282:                                        ; preds = %170, %197
  %194 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #10
  %195 = getelementptr inbounds i8, ptr %194, i64 16
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %28, ptr noundef nonnull align 8 dereferenceable(96) %16, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %195, i1 noundef zeroext true)
          to label %196 unwind label %200

196:                                              ; preds = %.lr.ph282
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %43, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %197 unwind label %202

197:                                              ; preds = %196
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #10
  %198 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %199 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  br i1 %199, label %.lr.ph282, label %._crit_edge283

200:                                              ; preds = %.lr.ph282
  %201 = landingpad { ptr, i32 }
          cleanup
  br label %204

202:                                              ; preds = %196
  %203 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  br label %204

204:                                              ; preds = %202, %200
  %.pn214 = phi { ptr, i32 } [ %203, %202 ], [ %201, %200 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #10
  br label %205

205:                                              ; preds = %204, %193, %149, %148, %142
  %.pn214.pn.pn = phi { ptr, i32 } [ %143, %142 ], [ %150, %149 ], [ %.pn205, %148 ], [ %.pn214, %204 ], [ %.pn207.pn.pn.pn.pn.pn, %193 ]
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  br label %206

206:                                              ; preds = %205, %140
  %.pn214.pn.pn.pn = phi { ptr, i32 } [ %.pn214.pn.pn, %205 ], [ %141, %140 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %16) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %16) #10
  br label %253

207:                                              ; preds = %.split515
  %208 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_NamedFunction_Ty20as_StructConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %209 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %1)
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %29) #10
  %210 = getelementptr inbounds i8, ptr %209, i64 8
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %29, ptr noundef null, ptr noundef nonnull %210, ptr noundef null, ptr noundef null, ptr noundef null)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(96) %0, i8 0, i64 96, i1 false)
  call void @_ZN3HIR13GenericParamsC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %0) #10
  store i8 0, ptr %39, align 8, !tbaa !59
  store i8 0, ptr %40, align 1, !tbaa !62
  invoke void @_ZN8RcString12new_internedEPKc(ptr dead_on_unwind nonnull writable sret(%class.RcString) align 8 %41, ptr noundef nonnull @.str.31)
          to label %211 unwind label %222

211:                                              ; preds = %207
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %30, ptr noundef nonnull align 8 dereferenceable(88) %1)
          to label %212 unwind label %224

212:                                              ; preds = %211
  %213 = load ptr, ptr %208, align 8, !tbaa !5
  invoke void @_ZN3HIR15TypePathBinding11make_StructEPKNS_6StructE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypePathBinding") align 8 %31, ptr noundef %213)
          to label %214 unwind label %226

214:                                              ; preds = %212
  invoke void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %42, ptr noundef nonnull %30, ptr noundef nonnull %31)
          to label %215 unwind label %228

215:                                              ; preds = %214
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %43, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #10
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #10
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %30) #10
  %216 = load ptr, ptr %208, align 8, !tbaa !5
  %217 = getelementptr inbounds i8, ptr %216, i64 104
  %218 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %217)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #10
  %219 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %218) #10
  store ptr %219, ptr %32, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #10
  %220 = call ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %218) #10
  store ptr %220, ptr %33, align 8
  %221 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  br i1 %221, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %236, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #10
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %29) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %29) #10
  br label %252

222:                                              ; preds = %207
  %223 = landingpad { ptr, i32 }
          cleanup
  br label %232

224:                                              ; preds = %211
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %231

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

228:                                              ; preds = %214
  %229 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #10
  br label %230

230:                                              ; preds = %228, %226
  %.pn = phi { ptr, i32 } [ %229, %228 ], [ %227, %226 ]
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %30) #10
  br label %231

231:                                              ; preds = %224, %230
  %.pn.pn = phi { ptr, i32 } [ %.pn, %230 ], [ %225, %224 ]
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  br label %232

232:                                              ; preds = %222, %231
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %231 ], [ %223, %222 ]
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %0) #10
  br label %244

.lr.ph:                                           ; preds = %215, %236
  %233 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #10
  %234 = getelementptr inbounds i8, ptr %233, i64 16
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %34, ptr noundef nonnull align 8 dereferenceable(96) %29, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %234, i1 noundef zeroext true)
          to label %235 unwind label %239

235:                                              ; preds = %.lr.ph
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %43, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %236 unwind label %241

236:                                              ; preds = %235
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  %237 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #10
  %238 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR6VisEntINS1_7TypeRefEEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  br i1 %238, label %.lr.ph, label %._crit_edge

239:                                              ; preds = %.lr.ph
  %240 = landingpad { ptr, i32 }
          cleanup
  br label %243

241:                                              ; preds = %235
  %242 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  br label %243

243:                                              ; preds = %241, %239
  %.pn202 = phi { ptr, i32 } [ %242, %241 ], [ %240, %239 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #10
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %0) #10
  br label %244

244:                                              ; preds = %232, %243
  %.pn202.pn = phi { ptr, i32 } [ %.pn202, %243 ], [ %.pn.pn.pn, %232 ]
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %29) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %29) #10
  br label %253

.critedge:                                        ; preds = %.split515
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #10
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %2)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %37) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(1) %37) #10
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull %36)
          to label %245 unwind label %248

245:                                              ; preds = %.critedge
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #10
  %246 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %246, ptr noundef nonnull @.str.30)
          to label %247 unwind label %250

247:                                              ; preds = %245
  call void @__cxa_throw(ptr nonnull %246, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #11
  unreachable

248:                                              ; preds = %.critedge
  %249 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #10
  br label %253

250:                                              ; preds = %245
  %251 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %246) #10
  br label %253

252:                                              ; preds = %._crit_edge, %._crit_edge283, %._crit_edge514
  ret void

253:                                              ; preds = %206, %244, %71, %73, %126, %57, %55, %250, %248
  %.pn202.pn.pn.pn = phi { ptr, i32 } [ %251, %250 ], [ %249, %248 ], [ %.pn202.pn, %244 ], [ %.pn214.pn.pn.pn, %206 ], [ %.pn221.pn.pn.pn, %126 ], [ %58, %57 ], [ %56, %55 ], [ %74, %73 ], [ %72, %71 ]
  resume { ptr, i32 } %.pn202.pn.pn.pn

254:                                              ; preds = %139
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8, ptr noundef nonnull align 8 dereferenceable(96), i32 noundef, i1 noundef zeroext) local_unnamed_addr #5

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

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

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

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

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

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

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

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

declare void @_ZNK3HIR10SimplePath6parentEv(ptr dead_on_unwind writable sret(%"struct.HIR::SimplePath") align 8, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8RcString12new_internedEPKc(ptr dead_on_unwind noalias writable sret(%class.RcString) align 8, ptr noundef) local_unnamed_addr #3 align 2

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

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

declare void @_ZN3HIR11GenericPathC1ENS_10SimplePathENS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef) unnamed_addr #5

declare void @_ZN3HIR4PathC1ENS_11GenericPathE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef) unnamed_addr #5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSZNK3HIR8TypeData18Data_NamedFunction5decayERK4SpanE3$_0", !6, i64 0}
!11 = !{!12, !13, i64 104}
!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 = !{i8 0, i8 2}
!58 = !{}
!59 = !{!60, !13, i64 96}
!60 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !22, i64 0, !13, i64 96, !13, i64 97, !21, i64 104, !20, i64 112, !45, i64 120}
!61 = !{!12, !13, i64 232}
!62 = !{!60, !13, i64 97}
!63 = !{!64, !6, i64 112}
!64 = !{!"_ZTS17MonomorphStatePtr", !65, i64 0, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120}
!65 = !{!"_ZTS15MonomorphiserPP", !66, i64 0}
!66 = !{!"_ZTS13Monomorphiser", !6, i64 8, !67, i64 16, !68, i64 72}
!67 = !{!"_ZTSN3HIR8ItemPathE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!68 = !{!"_ZTSSt6vectorIPKN3HIR13GenericParamsESaIS3_EE", !69, i64 0}
!69 = !{!"_ZTSSt12_Vector_baseIPKN3HIR13GenericParamsESaIS3_EE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseIPKN3HIR13GenericParamsESaIS3_EE12_Vector_implE", !71, i64 0}
!71 = !{!"_ZTSNSt12_Vector_baseIPKN3HIR13GenericParamsESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!72 = !{!73, !6, i64 0}
!73 = !{!"_ZTSN3HIR25TypeData_NamedFunction_Ty20Data_EnumConstructorE", !6, i64 0, !18, i64 8}
!74 = !{!73, !18, i64 8}


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