; LLVM IR from thepowersgang/mrustc :: src/hir_typeck/common.ll (ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb)

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

%"class.HIR::TypeRef" = type { ptr }
%struct.Span = type { ptr }
%"class.std::function.60" = 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.HIR::TypeData" = type { i32, %"union.HIR::TypeData::DataUnion" }
%"union.HIR::TypeData::DataUnion" = type { %"struct.HIR::TypeData_ErasedType", [16 x i8] }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.17", %"class.std::vector.22", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.17" = type { %"struct.std::_Vector_base.18" }
%"struct.std::_Vector_base.18" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.22" = type { %"struct.std::_Vector_base.23" }
%"struct.std::_Vector_base.23" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"struct.HIR::PathParams" = type { %class.ThinVector.2, %class.ThinVector.3, %class.ThinVector.4 }
%class.ThinVector.2 = type { ptr }
%class.ThinVector.3 = type { ptr }
%class.ThinVector.4 = type { ptr }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData::Data_Infer" = type { i32, i32 }
%"struct.HIR::TypeData::Data_Diverge" = type { i8 }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"struct.HIR::TypeData_TraitObject" = type <{ %"class.HIR::TraitPath", %"class.std::vector", %"struct.HIR::LifetimeRef", [4 x i8] }>
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr", %"class.HIR::GenericPath", %"class.std::map", %"class.std::map.5", ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.5" = type { %"class.std::_Rb_tree.6" }
%"class.std::_Rb_tree.6" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.HIR::GenericParams" = type { %"class.std::vector.40", %"class.std::vector.45", %"class.std::vector.50", %"class.std::vector.55" }
%"class.std::vector.40" = type { %"struct.std::_Vector_base.41" }
%"struct.std::_Vector_base.41" = 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.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = 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.50" = type { %"struct.std::_Vector_base.51" }
%"struct.std::_Vector_base.51" = 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.55" = type { %"struct.std::_Vector_base.56" }
%"struct.std::_Vector_base.56" = 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.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.68" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.69" = type { ptr }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn" = type <{ %"class.HIR::Path", i32, [4 x i8] }>
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"class.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr.27", [8 x i8] }
%"class.std::unique_ptr.27" = type { %"struct.std::__uniq_ptr_data.28" }
%"struct.std::__uniq_ptr_data.28" = type { %"class.std::__uniq_ptr_impl.29" }
%"class.std::__uniq_ptr_impl.29" = type { %"class.std::tuple.30" }
%"class.std::tuple.30" = type { %"struct.std::_Tuple_impl.31" }
%"struct.std::_Tuple_impl.31" = type { %"struct.std::_Head_base.34" }
%"struct.std::_Head_base.34" = type { ptr }
%"class.std::vector.35" = type { %"struct.std::_Vector_base.36" }
%"struct.std::_Vector_base.36" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.70" = type { ptr }
%"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::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.35" }
%"struct.HIR::TypeData::Data_Closure" = type { ptr }
%"struct.HIR::TypeData::Data_Generator" = type { ptr }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.63" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.63" = type { %"struct.std::_Vector_base.64" }
%"struct.std::_Vector_base.64" = 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::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }

@.str = external hidden unnamed_addr constant [39 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [80 x i8], align 1
@__PRETTY_FUNCTION__._ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb = external hidden unnamed_addr constant [103 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.3 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i1 noundef zeroext %4) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca %struct.Span, align 8
  %17 = alloca %"class.std::function.60", align 8
  %18 = alloca %class.anon, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.HIR::TypeData", align 8
  %22 = alloca %"struct.HIR::TypeData::Data_Infer", align 4
  %23 = alloca i8, align 1
  %24 = alloca ptr, align 8
  %25 = alloca %"class.HIR::TypeData", align 8
  %26 = alloca %"struct.HIR::TypeData::Data_Diverge", align 1
  %27 = alloca i8, align 1
  %28 = alloca ptr, align 8
  %29 = alloca i8, align 1
  %30 = alloca ptr, align 8
  %31 = alloca i1, align 1
  %32 = alloca %"class.HIR::TypeData", align 8
  %33 = alloca %"struct.HIR::TypeData_Path", align 8
  %34 = alloca %"class.HIR::TypePathBinding", align 8
  %35 = alloca i8, align 1
  %36 = alloca ptr, align 8
  %37 = alloca i8, align 1
  %38 = alloca ptr, align 8
  %39 = alloca %"struct.HIR::TypeData_TraitObject", align 8
  %40 = alloca %"class.std::unique_ptr", align 8
  %41 = alloca %"class.HIR::GenericParams", align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"class.HIR::TraitPath", align 8
  %44 = alloca ptr, align 8
  %45 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %46 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %47 = alloca ptr, align 8
  %48 = alloca %"class.HIR::GenericPath", align 8
  %49 = alloca %"struct.HIR::LifetimeRef", align 4
  %50 = alloca %"class.HIR::TypeData", align 8
  %51 = alloca %"struct.HIR::TypeData_TraitObject", align 8
  %52 = alloca i8, align 1
  %53 = alloca ptr, align 8
  %54 = alloca %"class.std::vector.17", align 8
  %55 = alloca ptr, align 8
  %56 = alloca %"class.__gnu_cxx::__normal_iterator.68", align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.68", align 8
  %58 = alloca ptr, align 8
  %59 = alloca %"class.HIR::TraitPath", align 8
  %60 = alloca %"class.std::vector.22", align 8
  %61 = alloca ptr, align 8
  %62 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %63 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %64 = alloca ptr, align 8
  %65 = alloca %"struct.HIR::LifetimeRef", align 4
  %66 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %67 = alloca i8, align 1
  %68 = alloca ptr, align 8
  %69 = alloca i8, align 1
  %70 = alloca ptr, align 8
  %71 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %72 = alloca %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", align 8
  %73 = alloca i8, align 1
  %74 = alloca ptr, align 8
  %75 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %76 = alloca %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", align 8
  %77 = alloca i8, align 1
  %78 = alloca ptr, align 8
  %79 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %80 = alloca %"class.HIR::TypeRef", align 8
  %81 = alloca %"class.HIR::TypeData", align 8
  %82 = alloca %"struct.HIR::TypeData_ErasedType", align 8
  %83 = alloca i8, align 1
  %84 = alloca ptr, align 8
  %85 = alloca %"class.HIR::TypeData", align 8
  %86 = alloca %"struct.HIR::TypeData::Data_Array", align 8
  %87 = alloca i8, align 1
  %88 = alloca ptr, align 8
  %89 = alloca %"class.HIR::TypeRef", align 8
  %90 = alloca i8, align 1
  %91 = alloca ptr, align 8
  %92 = alloca %"class.std::vector.35", align 8
  %93 = alloca ptr, align 8
  %94 = alloca %"class.__gnu_cxx::__normal_iterator.70", align 8
  %95 = alloca %"class.__gnu_cxx::__normal_iterator.70", align 8
  %96 = alloca ptr, align 8
  %97 = alloca %"class.HIR::TypeRef", align 8
  %98 = alloca %"class.std::vector.35", align 8
  %99 = alloca i8, align 1
  %100 = alloca ptr, align 8
  %101 = alloca %"class.HIR::TypeRef", align 8
  %102 = alloca %"struct.HIR::LifetimeRef", align 4
  %103 = alloca i8, align 1
  %104 = alloca ptr, align 8
  %105 = alloca %"class.HIR::TypeRef", align 8
  %106 = alloca i8, align 1
  %107 = alloca ptr, align 8
  %108 = alloca %"class.HIR::TypeData", align 8
  %109 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %110 = alloca i8, align 1
  %111 = alloca ptr, align 8
  %112 = alloca ptr, align 8
  %113 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %114 = alloca %"class.HIR::GenericParams", align 8
  %115 = alloca %"class.HIR::TypeRef", align 8
  %116 = alloca ptr, align 8
  %117 = alloca %"class.__gnu_cxx::__normal_iterator.70", align 8
  %118 = alloca %"class.__gnu_cxx::__normal_iterator.70", align 8
  %119 = alloca ptr, align 8
  %120 = alloca %"class.HIR::TypeRef", align 8
  %121 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %122 = alloca i8, align 1
  %123 = alloca ptr, align 8
  %124 = alloca %"struct.HIR::TypeData::Data_Closure", align 8
  %125 = alloca %"class.HIR::TypeData", align 8
  %126 = alloca %"struct.HIR::TypeData::Data_Closure", align 8
  %127 = alloca i8, align 1
  %128 = alloca ptr, align 8
  %129 = alloca %"struct.HIR::TypeData::Data_Generator", align 8
  %130 = alloca %"class.HIR::TypeData", align 8
  %131 = alloca %"struct.HIR::TypeData::Data_Generator", align 8
  store ptr %0, ptr %6, align 8
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  %132 = zext i1 %4 to i8
  store i8 %132, ptr %10, align 1, !tbaa !9
  %133 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #9
  store i8 1, ptr %11, align 1, !tbaa !9
  br label %134

134:                                              ; preds = %1277, %5
  %135 = load i8, ptr %11, align 1, !tbaa !9, !range !11, !noundef !12
  %136 = trunc i8 %135 to i1
  br i1 %136, label %138, label %137

137:                                              ; preds = %134
  store i32 2, ptr %12, align 4
  br label %1278

138:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %139)
  store ptr %140, ptr %13, align 8, !tbaa !5
  br label %141

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

144:                                              ; preds = %141
  store i32 5, ptr %12, align 4
  br label %1273

145:                                              ; preds = %141
  %146 = load ptr, ptr %13, align 8, !tbaa !5
  %147 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %146)
  switch i32 %147, label %1271 [
    i32 0, label %148
    i32 1, label %149
    i32 2, label %200
    i32 3, label %228
    i32 4, label %252
    i32 5, label %332
    i32 6, label %359
    i32 7, label %506
    i32 8, label %803
    i32 9, label %855
    i32 10, label %890
    i32 11, label %951
    i32 12, label %1000
    i32 13, label %1038
    i32 14, label %1086
    i32 15, label %1205
    i32 16, label %1238
  ]

148:                                              ; preds = %145
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 308, ptr noundef @__PRETTY_FUNCTION__._ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb) #10
  unreachable

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

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

153:                                              ; preds = %150
  store i32 9, ptr %12, align 4
  br label %197

154:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %155 = load ptr, ptr %13, align 8, !tbaa !5
  %156 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %155)
  store ptr %156, ptr %15, align 8, !tbaa !5
  br label %157

157:                                              ; preds = %191, %154
  %158 = load ptr, ptr %15, align 8, !tbaa !5
  %159 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %160 = trunc i8 %159 to i1
  br i1 %160, label %162, label %161

161:                                              ; preds = %157
  store i32 12, ptr %12, align 4
  br label %192

162:                                              ; preds = %157
  br label %163

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

166:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %167 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %167)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %168 = getelementptr inbounds %class.anon, ptr %18, i32 0, i32 0
  %169 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %169, ptr %168, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEbE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef %17)
          to label %170 unwind label %173

170:                                              ; preds = %166
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  %171 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %171, ptr noundef @.str.2)
          to label %172 unwind label %177

172:                                              ; preds = %170
  call void @__cxa_throw(ptr %171, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #11
  unreachable

173:                                              ; preds = %166
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %19, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %20, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  br label %194

177:                                              ; preds = %170
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %19, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %20, align 4
  call void @__cxa_free_exception(ptr %171) #9
  br label %194

181:                                              ; preds = %163
  br label %182

182:                                              ; preds = %181
  br label %183

183:                                              ; preds = %182
  %184 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %22, ptr align 4 %184, i64 8, i1 false), !tbaa.struct !13
  %185 = load i64, ptr %22, align 4
  call void @_ZN3HIR8TypeDataC2ENS0_10Data_InferE(ptr noundef nonnull align 8 dereferenceable(184) %21, i64 %185)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %21)
          to label %186 unwind label %187

186:                                              ; preds = %183
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %21) #9
  store i32 1, ptr %12, align 4
  br label %192

187:                                              ; preds = %183
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %19, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %21) #9
  br label %194

191:                                              ; No predecessors!
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %157, !llvm.loop !18

192:                                              ; preds = %186, %161
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  %193 = load i32, ptr %12, align 4
  switch i32 %193, label %197 [
    i32 12, label %195
  ]

194:                                              ; preds = %187, %177, %173
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #9
  br label %1275

195:                                              ; preds = %192
  br label %196

196:                                              ; preds = %195
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %150, !llvm.loop !20

197:                                              ; preds = %192, %153
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #9
  %198 = load i32, ptr %12, align 4
  switch i32 %198, label %1273 [
    i32 9, label %199
  ]

199:                                              ; preds = %197
  br label %1271

200:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #9
  store i8 1, ptr %23, align 1, !tbaa !9
  br label %201

201:                                              ; preds = %224, %200
  %202 = load i8, ptr %23, align 1, !tbaa !9, !range !11, !noundef !12
  %203 = trunc i8 %202 to i1
  br i1 %203, label %205, label %204

204:                                              ; preds = %201
  store i32 17, ptr %12, align 4
  br label %225

205:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %206 = load ptr, ptr %13, align 8, !tbaa !5
  %207 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %206)
  store ptr %207, ptr %24, align 8, !tbaa !5
  br label %208

208:                                              ; preds = %220, %205
  %209 = load ptr, ptr %24, align 8, !tbaa !5
  %210 = load i8, ptr %23, align 1, !tbaa !9, !range !11, !noundef !12
  %211 = trunc i8 %210 to i1
  br i1 %211, label %213, label %212

212:                                              ; preds = %208
  store i32 20, ptr %12, align 4
  br label %221

213:                                              ; preds = %208
  %214 = load ptr, ptr %24, align 8, !tbaa !5
  call void @_ZN3HIR8TypeDataC2ENS0_12Data_DivergeE(ptr noundef nonnull align 8 dereferenceable(184) %25)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %25)
          to label %215 unwind label %216

215:                                              ; preds = %213
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %25) #9
  store i32 1, ptr %12, align 4
  br label %221

216:                                              ; preds = %213
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %19, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  br label %1275

220:                                              ; No predecessors!
  store i8 0, ptr %23, align 1, !tbaa !9
  br label %208, !llvm.loop !21

221:                                              ; preds = %215, %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  %222 = load i32, ptr %12, align 4
  switch i32 %222, label %225 [
    i32 20, label %223
  ]

223:                                              ; preds = %221
  br label %224

224:                                              ; preds = %223
  store i8 0, ptr %23, align 1, !tbaa !9
  br label %201, !llvm.loop !22

225:                                              ; preds = %221, %204
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  %226 = load i32, ptr %12, align 4
  switch i32 %226, label %1273 [
    i32 17, label %227
  ]

227:                                              ; preds = %225
  br label %1271

228:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #9
  store i8 1, ptr %27, align 1, !tbaa !9
  br label %229

229:                                              ; preds = %248, %228
  %230 = load i8, ptr %27, align 1, !tbaa !9, !range !11, !noundef !12
  %231 = trunc i8 %230 to i1
  br i1 %231, label %233, label %232

232:                                              ; preds = %229
  store i32 23, ptr %12, align 4
  br label %249

233:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %234 = load ptr, ptr %13, align 8, !tbaa !5
  %235 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %234)
  store ptr %235, ptr %28, align 8, !tbaa !5
  br label %236

236:                                              ; preds = %244, %233
  %237 = load ptr, ptr %28, align 8, !tbaa !5
  %238 = load i8, ptr %27, align 1, !tbaa !9, !range !11, !noundef !12
  %239 = trunc i8 %238 to i1
  br i1 %239, label %241, label %240

240:                                              ; preds = %236
  store i32 26, ptr %12, align 4
  br label %245

241:                                              ; preds = %236
  %242 = load ptr, ptr %28, align 8, !tbaa !5
  %243 = load i32, ptr %242, align 4, !tbaa !23
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %243)
  store i32 1, ptr %12, align 4
  br label %245

244:                                              ; No predecessors!
  store i8 0, ptr %27, align 1, !tbaa !9
  br label %236, !llvm.loop !25

245:                                              ; preds = %241, %240
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  %246 = load i32, ptr %12, align 4
  switch i32 %246, label %249 [
    i32 26, label %247
  ]

247:                                              ; preds = %245
  br label %248

248:                                              ; preds = %247
  store i8 0, ptr %27, align 1, !tbaa !9
  br label %229, !llvm.loop !26

249:                                              ; preds = %245, %232
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #9
  %250 = load i32, ptr %12, align 4
  switch i32 %250, label %1273 [
    i32 23, label %251
  ]

251:                                              ; preds = %249
  br label %1271

252:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #9
  store i8 1, ptr %29, align 1, !tbaa !9
  br label %253

253:                                              ; preds = %328, %252
  %254 = load i8, ptr %29, align 1, !tbaa !9, !range !11, !noundef !12
  %255 = trunc i8 %254 to i1
  br i1 %255, label %257, label %256

256:                                              ; preds = %253
  store i32 29, ptr %12, align 4
  br label %329

257:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %258 = load ptr, ptr %13, align 8, !tbaa !5
  %259 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %258)
  store ptr %259, ptr %30, align 8, !tbaa !5
  br label %260

260:                                              ; preds = %323, %257
  %261 = load ptr, ptr %30, align 8, !tbaa !5
  %262 = load i8, ptr %29, align 1, !tbaa !9, !range !11, !noundef !12
  %263 = trunc i8 %262 to i1
  br i1 %263, label %265, label %264

264:                                              ; preds = %260
  store i32 32, ptr %12, align 4
  br label %324

265:                                              ; preds = %260
  store i1 false, ptr %31, align 1
  %266 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %33, i32 0, i32 0
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = load ptr, ptr %30, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %268, i32 0, i32 0
  %270 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %271 = trunc i8 %270 to i1
  call void @_ZNK13Monomorphiser14monomorph_pathERK4SpanRKN3HIR4PathEb(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %266, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %267, ptr noundef nonnull align 8 dereferenceable(88) %269, i1 noundef zeroext %271)
  %272 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %33, i32 0, i32 1
  %273 = load ptr, ptr %30, align 8, !tbaa !5
  %274 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %273, i32 0, i32 1
  invoke void @_ZNK3HIR15TypePathBinding5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypePathBinding") align 8 %272, ptr noundef nonnull align 8 dereferenceable(16) %274)
          to label %275 unwind label %292

275:                                              ; preds = %265
  %276 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %33, i32 0, i32 2
  call void @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEC2IS3_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %276) #9
  invoke void @_ZN3HIR8TypeDataC2ENS_13TypeData_PathE(ptr noundef nonnull align 8 dereferenceable(184) %32, ptr noundef %33)
          to label %277 unwind label %296

277:                                              ; preds = %275
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %32)
          to label %278 unwind label %300

278:                                              ; preds = %277
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %32) #9
  call void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %33) #9
  %279 = load ptr, ptr %30, align 8, !tbaa !5
  %280 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %279, i32 0, i32 1
  %281 = invoke noundef zeroext i1 @_ZNK3HIR15TypePathBinding9is_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16) %280)
          to label %282 unwind label %305

282:                                              ; preds = %278
  br i1 %281, label %283, label %318

283:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #9
  invoke void @_ZN3HIR15TypePathBindingC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34)
          to label %284 unwind label %309

284:                                              ; preds = %283
  %285 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZN3HIR7TypeRef10get_uniqueEv(ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %286 unwind label %313

286:                                              ; preds = %284
  %287 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %285)
          to label %288 unwind label %313

288:                                              ; preds = %286
  %289 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %287, i32 0, i32 1
  %290 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR15TypePathBindingaSEOS0_(ptr noundef nonnull align 8 dereferenceable(16) %289, ptr noundef nonnull align 8 dereferenceable(16) %34)
          to label %291 unwind label %313

291:                                              ; preds = %288
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  br label %318

292:                                              ; preds = %265
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %19, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %20, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %266) #9
  br label %326

296:                                              ; preds = %275
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %19, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %20, align 4
  br label %304

300:                                              ; preds = %277
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %19, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %32) #9
  br label %304

304:                                              ; preds = %300, %296
  call void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %33) #9
  br label %326

305:                                              ; preds = %278
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %19, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %20, align 4
  br label %322

309:                                              ; preds = %283
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %19, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %20, align 4
  br label %317

313:                                              ; preds = %288, %286, %284
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %19, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %20, align 4
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #9
  br label %317

317:                                              ; preds = %313, %309
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  br label %322

318:                                              ; preds = %291, %282
  store i1 true, ptr %31, align 1
  store i32 1, ptr %12, align 4
  %319 = load i1, ptr %31, align 1
  br i1 %319, label %321, label %320

320:                                              ; preds = %318
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #9
  br label %321

321:                                              ; preds = %320, %318
  br label %324

322:                                              ; preds = %317, %305
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #9
  br label %326

323:                                              ; No predecessors!
  store i8 0, ptr %29, align 1, !tbaa !9
  br label %260, !llvm.loop !27

324:                                              ; preds = %321, %264
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  %325 = load i32, ptr %12, align 4
  switch i32 %325, label %329 [
    i32 32, label %327
  ]

326:                                              ; preds = %322, %304, %292
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #9
  br label %1275

327:                                              ; preds = %324
  br label %328

328:                                              ; preds = %327
  store i8 0, ptr %29, align 1, !tbaa !9
  br label %253, !llvm.loop !28

329:                                              ; preds = %324, %256
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #9
  %330 = load i32, ptr %12, align 4
  switch i32 %330, label %1273 [
    i32 29, label %331
  ]

331:                                              ; preds = %329
  br label %1271

332:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #9
  store i8 1, ptr %35, align 1, !tbaa !9
  br label %333

333:                                              ; preds = %355, %332
  %334 = load i8, ptr %35, align 1, !tbaa !9, !range !11, !noundef !12
  %335 = trunc i8 %334 to i1
  br i1 %335, label %337, label %336

336:                                              ; preds = %333
  store i32 35, ptr %12, align 4
  br label %356

337:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %338 = load ptr, ptr %13, align 8, !tbaa !5
  %339 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %338)
  store ptr %339, ptr %36, align 8, !tbaa !5
  br label %340

340:                                              ; preds = %351, %337
  %341 = load ptr, ptr %36, align 8, !tbaa !5
  %342 = load i8, ptr %35, align 1, !tbaa !9, !range !11, !noundef !12
  %343 = trunc i8 %342 to i1
  br i1 %343, label %345, label %344

344:                                              ; preds = %340
  store i32 38, ptr %12, align 4
  br label %352

345:                                              ; preds = %340
  %346 = load ptr, ptr %8, align 8, !tbaa !5
  %347 = load ptr, ptr %36, align 8, !tbaa !5
  %348 = load ptr, ptr %133, align 8, !tbaa !29
  %349 = getelementptr inbounds ptr, ptr %348, i64 2
  %350 = load ptr, ptr %349, align 8
  call void %350(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %346, ptr noundef nonnull align 8 dereferenceable(12) %347)
  store i32 1, ptr %12, align 4
  br label %352

351:                                              ; No predecessors!
  store i8 0, ptr %35, align 1, !tbaa !9
  br label %340, !llvm.loop !31

352:                                              ; preds = %345, %344
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  %353 = load i32, ptr %12, align 4
  switch i32 %353, label %356 [
    i32 38, label %354
  ]

354:                                              ; preds = %352
  br label %355

355:                                              ; preds = %354
  store i8 0, ptr %35, align 1, !tbaa !9
  br label %333, !llvm.loop !32

356:                                              ; preds = %352, %336
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #9
  %357 = load i32, ptr %12, align 4
  switch i32 %357, label %1273 [
    i32 35, label %358
  ]

358:                                              ; preds = %356
  br label %1271

359:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #9
  store i8 1, ptr %37, align 1, !tbaa !9
  br label %360

360:                                              ; preds = %502, %359
  %361 = load i8, ptr %37, align 1, !tbaa !9, !range !11, !noundef !12
  %362 = trunc i8 %361 to i1
  br i1 %362, label %364, label %363

363:                                              ; preds = %360
  store i32 41, ptr %12, align 4
  br label %503

364:                                              ; preds = %360
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %365 = load ptr, ptr %13, align 8, !tbaa !5
  %366 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %365)
  store ptr %366, ptr %38, align 8, !tbaa !5
  br label %367

367:                                              ; preds = %498, %364
  %368 = load ptr, ptr %38, align 8, !tbaa !5
  %369 = load i8, ptr %37, align 1, !tbaa !9, !range !11, !noundef !12
  %370 = trunc i8 %369 to i1
  br i1 %370, label %372, label %371

371:                                              ; preds = %367
  store i32 44, ptr %12, align 4
  br label %499

372:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 176, ptr %39) #9
  call void @_ZN3HIR20TypeData_TraitObjectC2Ev(ptr noundef nonnull align 8 dereferenceable(172) %39)
  %373 = load ptr, ptr %38, align 8, !tbaa !5
  %374 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %373, i32 0, i32 0
  %375 = getelementptr inbounds %"class.HIR::TraitPath", ptr %374, i32 0, i32 0
  %376 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %375) #9
  br i1 %376, label %377, label %406

377:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 96, ptr %41) #9
  %378 = load ptr, ptr %38, align 8, !tbaa !5
  %379 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %378, i32 0, i32 0
  %380 = getelementptr inbounds %"class.HIR::TraitPath", ptr %379, i32 0, i32 0
  %381 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %380) #9
  invoke void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8 %41, ptr noundef nonnull align 8 dereferenceable(96) %381)
          to label %382 unwind label %393

382:                                              ; preds = %377
  invoke void @_Z15make_unique_ptrIN3HIR13GenericParamsEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %40, ptr noundef nonnull align 8 dereferenceable(96) %41)
          to label %383 unwind label %397

383:                                              ; preds = %382
  %384 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %39, i32 0, i32 0
  %385 = getelementptr inbounds %"class.HIR::TraitPath", ptr %384, i32 0, i32 0
  %386 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(8) %385, ptr noundef nonnull align 8 dereferenceable(8) %40) #9
  call void @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #9
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %41) #9
  call void @llvm.lifetime.end.p0(i64 96, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  %387 = getelementptr inbounds %class.Monomorphiser, ptr %133, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %388 = load ptr, ptr %38, align 8, !tbaa !5
  %389 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %388, i32 0, i32 0
  %390 = getelementptr inbounds %"class.HIR::TraitPath", ptr %389, i32 0, i32 0
  %391 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %390) #9
  store ptr %391, ptr %42, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPKN3HIR13GenericParamsESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %387, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %392 unwind label %402

392:                                              ; preds = %383
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %406

393:                                              ; preds = %377
  %394 = landingpad { ptr, i32 }
          cleanup
  %395 = extractvalue { ptr, i32 } %394, 0
  store ptr %395, ptr %19, align 8
  %396 = extractvalue { ptr, i32 } %394, 1
  store i32 %396, ptr %20, align 4
  br label %401

397:                                              ; preds = %382
  %398 = landingpad { ptr, i32 }
          cleanup
  %399 = extractvalue { ptr, i32 } %398, 0
  store ptr %399, ptr %19, align 8
  %400 = extractvalue { ptr, i32 } %398, 1
  store i32 %400, ptr %20, align 4
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %41) #9
  br label %401

401:                                              ; preds = %397, %393
  call void @llvm.lifetime.end.p0(i64 96, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  br label %497

402:                                              ; preds = %383
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %19, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %497

406:                                              ; preds = %392, %372
  call void @llvm.lifetime.start.p0(i64 144, ptr %43) #9
  %407 = load ptr, ptr %8, align 8, !tbaa !5
  %408 = load ptr, ptr %38, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %408, i32 0, i32 0
  %410 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %411 = trunc i8 %410 to i1
  invoke void @_ZNK13Monomorphiser19monomorph_traitpathERK4SpanRKN3HIR9TraitPathEbb(ptr dead_on_unwind writable sret(%"class.HIR::TraitPath") align 8 %43, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %407, ptr noundef nonnull align 8 dereferenceable(144) %409, i1 noundef zeroext %411, i1 noundef zeroext false)
          to label %412 unwind label %427

412:                                              ; preds = %406
  %413 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %39, i32 0, i32 0
  %414 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR9TraitPathaSEOS0_(ptr noundef nonnull align 8 dereferenceable(144) %413, ptr noundef nonnull align 8 dereferenceable(144) %43)
          to label %415 unwind label %431

415:                                              ; preds = %412
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %43) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %416 = load ptr, ptr %38, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %416, i32 0, i32 1
  store ptr %417, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %418 = load ptr, ptr %44, align 8, !tbaa !5
  %419 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %418) #9
  %420 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %45, i32 0, i32 0
  store ptr %419, ptr %420, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %421 = load ptr, ptr %44, align 8, !tbaa !5
  %422 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %421) #9
  %423 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %46, i32 0, i32 0
  store ptr %422, ptr %423, align 8
  br label %424

424:                                              ; preds = %448, %415
  %425 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46) #9
  br i1 %425, label %436, label %426

426:                                              ; preds = %424
  store i32 47, ptr %12, align 4
  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 8, ptr %44) #9
  br label %459

427:                                              ; preds = %406
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %19, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %20, align 4
  br label %435

431:                                              ; preds = %412
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %19, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %20, align 4
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %43) #9
  br label %435

435:                                              ; preds = %431, %427
  call void @llvm.lifetime.end.p0(i64 144, ptr %43) #9
  br label %497

436:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %437 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #9
  store ptr %437, ptr %47, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %39, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #9
  %439 = load ptr, ptr %8, align 8, !tbaa !5
  %440 = load ptr, ptr %47, align 8, !tbaa !5
  %441 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %442 = trunc i8 %441 to i1
  %443 = load ptr, ptr %133, align 8, !tbaa !29
  %444 = getelementptr inbounds ptr, ptr %443, i64 7
  %445 = load ptr, ptr %444, align 8
  invoke void %445(ptr dead_on_unwind writable sret(%"class.HIR::GenericPath") align 8 %48, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %439, ptr noundef nonnull align 8 dereferenceable(32) %440, i1 noundef zeroext %442, i1 noundef zeroext false)
          to label %446 unwind label %450

446:                                              ; preds = %436
  invoke void @_ZNSt6vectorIN3HIR11GenericPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %438, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %447 unwind label %454

447:                                              ; preds = %446
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %448

448:                                              ; preds = %447
  %449 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #9
  br label %424

450:                                              ; preds = %436
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %19, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %20, align 4
  br label %458

454:                                              ; preds = %446
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %19, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %20, align 4
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  br label %458

458:                                              ; preds = %454, %450
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %44) #9
  br label %497

459:                                              ; preds = %426
  %460 = load ptr, ptr %38, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %460, i32 0, i32 0
  %462 = getelementptr inbounds %"class.HIR::TraitPath", ptr %461, i32 0, i32 0
  %463 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %462) #9
  br i1 %463, label %464, label %466

464:                                              ; preds = %459
  %465 = getelementptr inbounds %class.Monomorphiser, ptr %133, i32 0, i32 3
  call void @_ZNSt6vectorIPKN3HIR13GenericParamsESaIS3_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %465) #9
  br label %466

466:                                              ; preds = %464, %459
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %467 = load ptr, ptr %8, align 8, !tbaa !5
  %468 = load ptr, ptr %38, align 8, !tbaa !5
  %469 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %468, i32 0, i32 2
  %470 = load ptr, ptr %133, align 8, !tbaa !29
  %471 = getelementptr inbounds ptr, ptr %470, i64 6
  %472 = load ptr, ptr %471, align 8
  %473 = invoke i32 %472(ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %467, ptr noundef nonnull align 4 dereferenceable(4) %469)
          to label %474 unwind label %480

474:                                              ; preds = %466
  %475 = getelementptr inbounds %"struct.HIR::LifetimeRef", ptr %49, i32 0, i32 0
  store i32 %473, ptr %475, align 4
  %476 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %39, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %476, ptr align 4 %49, i64 4, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  invoke void @_ZN3HIR20TypeData_TraitObjectC2EOS0_(ptr noundef nonnull align 8 dereferenceable(172) %51, ptr noundef nonnull align 8 dereferenceable(172) %39)
          to label %477 unwind label %484

477:                                              ; preds = %474
  invoke void @_ZN3HIR8TypeDataC2ENS_20TypeData_TraitObjectE(ptr noundef nonnull align 8 dereferenceable(184) %50, ptr noundef %51)
          to label %478 unwind label %488

478:                                              ; preds = %477
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %50)
          to label %479 unwind label %492

479:                                              ; preds = %478
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %50) #9
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %51) #9
  store i32 1, ptr %12, align 4
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %39) #9
  call void @llvm.lifetime.end.p0(i64 176, ptr %39) #9
  br label %499

480:                                              ; preds = %466
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %19, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %497

484:                                              ; preds = %474
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %19, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %20, align 4
  br label %497

488:                                              ; preds = %477
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %19, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %20, align 4
  br label %496

492:                                              ; preds = %478
  %493 = landingpad { ptr, i32 }
          cleanup
  %494 = extractvalue { ptr, i32 } %493, 0
  store ptr %494, ptr %19, align 8
  %495 = extractvalue { ptr, i32 } %493, 1
  store i32 %495, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %50) #9
  br label %496

496:                                              ; preds = %492, %488
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %51) #9
  br label %497

497:                                              ; preds = %496, %484, %480, %458, %435, %402, %401
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %39) #9
  call void @llvm.lifetime.end.p0(i64 176, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  br label %1275

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

499:                                              ; preds = %479, %371
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  %500 = load i32, ptr %12, align 4
  switch i32 %500, label %503 [
    i32 44, label %501
  ]

501:                                              ; preds = %499
  br label %502

502:                                              ; preds = %501
  store i8 0, ptr %37, align 1, !tbaa !9
  br label %360, !llvm.loop !35

503:                                              ; preds = %499, %363
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  %504 = load i32, ptr %12, align 4
  switch i32 %504, label %1273 [
    i32 41, label %505
  ]

505:                                              ; preds = %503
  br label %1271

506:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #9
  store i8 1, ptr %52, align 1, !tbaa !9
  br label %507

507:                                              ; preds = %799, %506
  %508 = load i8, ptr %52, align 1, !tbaa !9, !range !11, !noundef !12
  %509 = trunc i8 %508 to i1
  br i1 %509, label %511, label %510

510:                                              ; preds = %507
  store i32 49, ptr %12, align 4
  br label %800

511:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %512 = load ptr, ptr %13, align 8, !tbaa !5
  %513 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %512)
  store ptr %513, ptr %53, align 8, !tbaa !5
  br label %514

514:                                              ; preds = %795, %511
  %515 = load ptr, ptr %53, align 8, !tbaa !5
  %516 = load i8, ptr %52, align 1, !tbaa !9, !range !11, !noundef !12
  %517 = trunc i8 %516 to i1
  br i1 %517, label %519, label %518

518:                                              ; preds = %514
  store i32 52, ptr %12, align 4
  br label %796

519:                                              ; preds = %514
  call void @llvm.lifetime.start.p0(i64 24, ptr %54) #9
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %54) #9
  %520 = load ptr, ptr %53, align 8, !tbaa !5
  %521 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %520, i32 0, i32 1
  %522 = call noundef i64 @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %521) #9
  invoke void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %54, i64 noundef %522)
          to label %523 unwind label %535

523:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %524 = load ptr, ptr %53, align 8, !tbaa !5
  %525 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %524, i32 0, i32 1
  store ptr %525, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #9
  %526 = load ptr, ptr %55, align 8, !tbaa !5
  %527 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %526) #9
  %528 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.68", ptr %56, i32 0, i32 0
  store ptr %527, ptr %528, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  %529 = load ptr, ptr %55, align 8, !tbaa !5
  %530 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %529) #9
  %531 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.68", ptr %57, i32 0, i32 0
  store ptr %530, ptr %531, align 8
  br label %532

532:                                              ; preds = %547, %523
  %533 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %57) #9
  br i1 %533, label %539, label %534

534:                                              ; preds = %532
  store i32 55, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %558

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

539:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  %540 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  store ptr %540, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 144, ptr %59) #9
  %541 = load ptr, ptr %8, align 8, !tbaa !5
  %542 = load ptr, ptr %58, align 8, !tbaa !5
  %543 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %544 = trunc i8 %543 to i1
  invoke void @_ZNK13Monomorphiser19monomorph_traitpathERK4SpanRKN3HIR9TraitPathEbb(ptr dead_on_unwind writable sret(%"class.HIR::TraitPath") align 8 %59, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %541, ptr noundef nonnull align 8 dereferenceable(144) %542, i1 noundef zeroext %544, i1 noundef zeroext false)
          to label %545 unwind label %549

545:                                              ; preds = %539
  invoke void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %54, ptr noundef nonnull align 8 dereferenceable(144) %59)
          to label %546 unwind label %553

546:                                              ; preds = %545
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %59) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  br label %547

547:                                              ; preds = %546
  %548 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  br label %532

549:                                              ; preds = %539
  %550 = landingpad { ptr, i32 }
          cleanup
  %551 = extractvalue { ptr, i32 } %550, 0
  store ptr %551, ptr %19, align 8
  %552 = extractvalue { ptr, i32 } %550, 1
  store i32 %552, ptr %20, align 4
  br label %557

553:                                              ; preds = %545
  %554 = landingpad { ptr, i32 }
          cleanup
  %555 = extractvalue { ptr, i32 } %554, 0
  store ptr %555, ptr %19, align 8
  %556 = extractvalue { ptr, i32 } %554, 1
  store i32 %556, ptr %20, align 4
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %59) #9
  br label %557

557:                                              ; preds = %553, %549
  call void @llvm.lifetime.end.p0(i64 144, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %794

558:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 24, ptr %60) #9
  call void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %559 = load ptr, ptr %53, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %559, i32 0, i32 2
  store ptr %560, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %561 = load ptr, ptr %61, align 8, !tbaa !5
  %562 = call ptr @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %561) #9
  %563 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.69", ptr %62, i32 0, i32 0
  store ptr %562, ptr %563, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %564 = load ptr, ptr %61, align 8, !tbaa !5
  %565 = call ptr @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %564) #9
  %566 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.69", ptr %63, i32 0, i32 0
  store ptr %565, ptr %566, align 8
  br label %567

567:                                              ; preds = %581, %558
  %568 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef nonnull align 8 dereferenceable(8) %63) #9
  br i1 %568, label %570, label %569

569:                                              ; preds = %567
  store i32 57, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  br label %587

570:                                              ; preds = %567
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %571 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %62) #9
  store ptr %571, ptr %64, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #9
  %572 = load ptr, ptr %8, align 8, !tbaa !5
  %573 = load ptr, ptr %64, align 8, !tbaa !5
  %574 = load ptr, ptr %133, align 8, !tbaa !29
  %575 = getelementptr inbounds ptr, ptr %574, i64 6
  %576 = load ptr, ptr %575, align 8
  %577 = invoke i32 %576(ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %572, ptr noundef nonnull align 4 dereferenceable(4) %573)
          to label %578 unwind label %583

578:                                              ; preds = %570
  %579 = getelementptr inbounds %"struct.HIR::LifetimeRef", ptr %65, i32 0, i32 0
  store i32 %577, ptr %579, align 4
  invoke void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(4) %65)
          to label %580 unwind label %583

580:                                              ; preds = %578
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  br label %581

581:                                              ; preds = %580
  %582 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %62) #9
  br label %567

583:                                              ; preds = %578, %570
  %584 = landingpad { ptr, i32 }
          cleanup
  %585 = extractvalue { ptr, i32 } %584, 0
  store ptr %585, ptr %19, align 8
  %586 = extractvalue { ptr, i32 } %584, 1
  store i32 %586, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  br label %793

587:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 104, ptr %66) #9
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %66)
          to label %588 unwind label %593

588:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 1, ptr %67) #9
  store i8 1, ptr %67, align 1, !tbaa !9
  br label %589

589:                                              ; preds = %769, %588
  %590 = load i8, ptr %67, align 1, !tbaa !9, !range !11, !noundef !12
  %591 = trunc i8 %590 to i1
  br i1 %591, label %597, label %592

592:                                              ; preds = %589
  store i32 59, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #9
  br label %770

593:                                              ; preds = %587
  %594 = landingpad { ptr, i32 }
          cleanup
  %595 = extractvalue { ptr, i32 } %594, 0
  store ptr %595, ptr %19, align 8
  %596 = extractvalue { ptr, i32 } %594, 1
  store i32 %596, ptr %20, align 4
  br label %792

597:                                              ; preds = %589
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %598 = load ptr, ptr %53, align 8, !tbaa !5
  %599 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %598, i32 0, i32 3
  store ptr %599, ptr %68, align 8, !tbaa !5
  br label %600

600:                                              ; preds = %766, %597
  %601 = load i8, ptr %67, align 1, !tbaa !9, !range !11, !noundef !12
  %602 = trunc i8 %601 to i1
  br i1 %602, label %604, label %603

603:                                              ; preds = %600
  store i32 62, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  br label %768

604:                                              ; preds = %600
  %605 = load ptr, ptr %68, align 8, !tbaa !5
  %606 = invoke noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %605)
          to label %607 unwind label %608

607:                                              ; preds = %604
  switch i32 %606, label %765 [
    i32 0, label %612
    i32 1, label %613
    i32 3, label %665
    i32 2, label %716
  ]

608:                                              ; preds = %604
  %609 = landingpad { ptr, i32 }
          cleanup
  %610 = extractvalue { ptr, i32 } %609, 0
  store ptr %610, ptr %19, align 8
  %611 = extractvalue { ptr, i32 } %609, 1
  store i32 %611, ptr %20, align 4
  br label %767

612:                                              ; preds = %607
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 361, ptr noundef @__PRETTY_FUNCTION__._ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb) #10
  unreachable

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

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

617:                                              ; preds = %614
  store i32 66, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #9
  br label %664

618:                                              ; preds = %614
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %619 = load ptr, ptr %68, align 8, !tbaa !5
  %620 = invoke noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %619)
          to label %621 unwind label %627

621:                                              ; preds = %618
  store ptr %620, ptr %70, align 8, !tbaa !5
  br label %622

622:                                              ; preds = %646, %621
  %623 = load ptr, ptr %70, align 8, !tbaa !5
  %624 = load i8, ptr %69, align 1, !tbaa !9, !range !11, !noundef !12
  %625 = trunc i8 %624 to i1
  br i1 %625, label %631, label %626

626:                                              ; preds = %622
  store i32 69, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  br label %662

627:                                              ; preds = %618
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %19, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %20, align 4
  br label %661

631:                                              ; preds = %622
  call void @llvm.lifetime.start.p0(i64 104, ptr %71) #9
  %632 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %72, i32 0, i32 0
  %633 = load ptr, ptr %8, align 8, !tbaa !5
  %634 = load ptr, ptr %70, align 8, !tbaa !5
  %635 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %634, i32 0, i32 0
  %636 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %637 = trunc i8 %636 to i1
  invoke void @_ZNK13Monomorphiser14monomorph_pathERK4SpanRKN3HIR4PathEb(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %632, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %633, ptr noundef nonnull align 8 dereferenceable(88) %635, i1 noundef zeroext %637)
          to label %638 unwind label %647

638:                                              ; preds = %631
  %639 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %72, i32 0, i32 1
  %640 = load ptr, ptr %70, align 8, !tbaa !5
  %641 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %640, i32 0, i32 1
  %642 = load i32, ptr %641, align 8, !tbaa !36
  store i32 %642, ptr %639, align 8, !tbaa !36
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS0_8Data_FcnE(ptr noundef nonnull align 8 dereferenceable(104) %71, ptr noundef %72)
          to label %643 unwind label %651

643:                                              ; preds = %638
  %644 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %66, ptr noundef nonnull align 8 dereferenceable(104) %71)
          to label %645 unwind label %655

645:                                              ; preds = %643
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %71) #9
  call void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92) %72) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr %71) #9
  br label %646

646:                                              ; preds = %645
  store i8 0, ptr %69, align 1, !tbaa !9
  br label %622, !llvm.loop !41

647:                                              ; preds = %631
  %648 = landingpad { ptr, i32 }
          cleanup
  %649 = extractvalue { ptr, i32 } %648, 0
  store ptr %649, ptr %19, align 8
  %650 = extractvalue { ptr, i32 } %648, 1
  store i32 %650, ptr %20, align 4
  br label %660

651:                                              ; preds = %638
  %652 = landingpad { ptr, i32 }
          cleanup
  %653 = extractvalue { ptr, i32 } %652, 0
  store ptr %653, ptr %19, align 8
  %654 = extractvalue { ptr, i32 } %652, 1
  store i32 %654, ptr %20, align 4
  br label %659

655:                                              ; preds = %643
  %656 = landingpad { ptr, i32 }
          cleanup
  %657 = extractvalue { ptr, i32 } %656, 0
  store ptr %657, ptr %19, align 8
  %658 = extractvalue { ptr, i32 } %656, 1
  store i32 %658, ptr %20, align 4
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %71) #9
  br label %659

659:                                              ; preds = %655, %651
  call void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92) %72) #9
  br label %660

660:                                              ; preds = %659, %647
  call void @llvm.lifetime.end.p0(i64 104, ptr %71) #9
  br label %661

661:                                              ; preds = %660, %627
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #9
  br label %767

662:                                              ; preds = %626
  br label %663

663:                                              ; preds = %662
  store i8 0, ptr %69, align 1, !tbaa !9
  br label %614, !llvm.loop !42

664:                                              ; preds = %617
  br label %765

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

666:                                              ; preds = %714, %665
  %667 = load i8, ptr %73, align 1, !tbaa !9, !range !11, !noundef !12
  %668 = trunc i8 %667 to i1
  br i1 %668, label %670, label %669

669:                                              ; preds = %666
  store i32 72, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #9
  br label %715

670:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %671 = load ptr, ptr %68, align 8, !tbaa !5
  %672 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %671)
          to label %673 unwind label %679

673:                                              ; preds = %670
  store ptr %672, ptr %74, align 8, !tbaa !5
  br label %674

674:                                              ; preds = %697, %673
  %675 = load ptr, ptr %74, align 8, !tbaa !5
  %676 = load i8, ptr %73, align 1, !tbaa !9, !range !11, !noundef !12
  %677 = trunc i8 %676 to i1
  br i1 %677, label %683, label %678

678:                                              ; preds = %674
  store i32 75, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  br label %713

679:                                              ; preds = %670
  %680 = landingpad { ptr, i32 }
          cleanup
  %681 = extractvalue { ptr, i32 } %680, 0
  store ptr %681, ptr %19, align 8
  %682 = extractvalue { ptr, i32 } %680, 1
  store i32 %682, ptr %20, align 4
  br label %712

683:                                              ; preds = %674
  call void @llvm.lifetime.start.p0(i64 104, ptr %75) #9
  %684 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %76, i32 0, i32 0
  %685 = load ptr, ptr %8, align 8, !tbaa !5
  %686 = load ptr, ptr %74, align 8, !tbaa !5
  %687 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %686, i32 0, i32 0
  %688 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %689 = trunc i8 %688 to i1
  invoke void @_ZNK13Monomorphiser21monomorph_path_paramsERK4SpanRKN3HIR10PathParamsEb(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8 %684, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %685, ptr noundef nonnull align 8 dereferenceable(24) %687, i1 noundef zeroext %689)
          to label %690 unwind label %698

690:                                              ; preds = %683
  %691 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %76, i32 0, i32 1
  %692 = load ptr, ptr %74, align 8, !tbaa !5
  %693 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %692, i32 0, i32 1
  call void @_ZNSt10shared_ptrIN3HIR30TypeData_ErasedType_AliasInnerEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %691, ptr noundef nonnull align 8 dereferenceable(16) %693) #9
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS0_10Data_AliasE(ptr noundef nonnull align 8 dereferenceable(104) %75, ptr noundef %76)
          to label %694 unwind label %702

694:                                              ; preds = %690
  %695 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %66, ptr noundef nonnull align 8 dereferenceable(104) %75)
          to label %696 unwind label %706

696:                                              ; preds = %694
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %75) #9
  call void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %76) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr %75) #9
  br label %697

697:                                              ; preds = %696
  store i8 0, ptr %73, align 1, !tbaa !9
  br label %674, !llvm.loop !43

698:                                              ; preds = %683
  %699 = landingpad { ptr, i32 }
          cleanup
  %700 = extractvalue { ptr, i32 } %699, 0
  store ptr %700, ptr %19, align 8
  %701 = extractvalue { ptr, i32 } %699, 1
  store i32 %701, ptr %20, align 4
  br label %711

702:                                              ; preds = %690
  %703 = landingpad { ptr, i32 }
          cleanup
  %704 = extractvalue { ptr, i32 } %703, 0
  store ptr %704, ptr %19, align 8
  %705 = extractvalue { ptr, i32 } %703, 1
  store i32 %705, ptr %20, align 4
  br label %710

706:                                              ; preds = %694
  %707 = landingpad { ptr, i32 }
          cleanup
  %708 = extractvalue { ptr, i32 } %707, 0
  store ptr %708, ptr %19, align 8
  %709 = extractvalue { ptr, i32 } %707, 1
  store i32 %709, ptr %20, align 4
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %75) #9
  br label %710

710:                                              ; preds = %706, %702
  call void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %76) #9
  br label %711

711:                                              ; preds = %710, %698
  call void @llvm.lifetime.end.p0(i64 104, ptr %75) #9
  br label %712

712:                                              ; preds = %711, %679
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #9
  br label %767

713:                                              ; preds = %678
  br label %714

714:                                              ; preds = %713
  store i8 0, ptr %73, align 1, !tbaa !9
  br label %666, !llvm.loop !44

715:                                              ; preds = %669
  br label %765

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

717:                                              ; preds = %763, %716
  %718 = load i8, ptr %77, align 1, !tbaa !9, !range !11, !noundef !12
  %719 = trunc i8 %718 to i1
  br i1 %719, label %721, label %720

720:                                              ; preds = %717
  store i32 78, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #9
  br label %764

721:                                              ; preds = %717
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  %722 = load ptr, ptr %68, align 8, !tbaa !5
  %723 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %722)
          to label %724 unwind label %730

724:                                              ; preds = %721
  store ptr %723, ptr %78, align 8, !tbaa !5
  br label %725

725:                                              ; preds = %746, %724
  %726 = load ptr, ptr %78, align 8, !tbaa !5
  %727 = load i8, ptr %77, align 1, !tbaa !9, !range !11, !noundef !12
  %728 = trunc i8 %727 to i1
  br i1 %728, label %734, label %729

729:                                              ; preds = %725
  store i32 81, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  br label %762

730:                                              ; preds = %721
  %731 = landingpad { ptr, i32 }
          cleanup
  %732 = extractvalue { ptr, i32 } %731, 0
  store ptr %732, ptr %19, align 8
  %733 = extractvalue { ptr, i32 } %731, 1
  store i32 %733, ptr %20, align 4
  br label %761

734:                                              ; preds = %725
  call void @llvm.lifetime.start.p0(i64 104, ptr %79) #9
  %735 = load ptr, ptr %8, align 8, !tbaa !5
  %736 = load ptr, ptr %78, align 8, !tbaa !5
  %737 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %738 = trunc i8 %737 to i1
  %739 = load ptr, ptr %133, align 8, !tbaa !29
  %740 = getelementptr inbounds ptr, ptr %739, i64 5
  %741 = load ptr, ptr %740, align 8
  invoke void %741(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %80, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %735, ptr noundef nonnull align 8 dereferenceable(8) %736, i1 noundef zeroext %738)
          to label %742 unwind label %747

742:                                              ; preds = %734
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(104) %79, ptr noundef %80)
          to label %743 unwind label %751

743:                                              ; preds = %742
  %744 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %66, ptr noundef nonnull align 8 dereferenceable(104) %79)
          to label %745 unwind label %755

745:                                              ; preds = %743
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %79) #9
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr %79) #9
  br label %746

746:                                              ; preds = %745
  store i8 0, ptr %77, align 1, !tbaa !9
  br label %725, !llvm.loop !45

747:                                              ; preds = %734
  %748 = landingpad { ptr, i32 }
          cleanup
  %749 = extractvalue { ptr, i32 } %748, 0
  store ptr %749, ptr %19, align 8
  %750 = extractvalue { ptr, i32 } %748, 1
  store i32 %750, ptr %20, align 4
  br label %760

751:                                              ; preds = %742
  %752 = landingpad { ptr, i32 }
          cleanup
  %753 = extractvalue { ptr, i32 } %752, 0
  store ptr %753, ptr %19, align 8
  %754 = extractvalue { ptr, i32 } %752, 1
  store i32 %754, ptr %20, align 4
  br label %759

755:                                              ; preds = %743
  %756 = landingpad { ptr, i32 }
          cleanup
  %757 = extractvalue { ptr, i32 } %756, 0
  store ptr %757, ptr %19, align 8
  %758 = extractvalue { ptr, i32 } %756, 1
  store i32 %758, ptr %20, align 4
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %79) #9
  br label %759

759:                                              ; preds = %755, %751
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #9
  br label %760

760:                                              ; preds = %759, %747
  call void @llvm.lifetime.end.p0(i64 104, ptr %79) #9
  br label %761

761:                                              ; preds = %760, %730
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #9
  br label %767

762:                                              ; preds = %729
  br label %763

763:                                              ; preds = %762
  store i8 0, ptr %77, align 1, !tbaa !9
  br label %717, !llvm.loop !46

764:                                              ; preds = %720
  br label %765

765:                                              ; preds = %764, %715, %664, %607
  br label %766

766:                                              ; preds = %765
  store i8 0, ptr %67, align 1, !tbaa !9
  br label %600, !llvm.loop !47

767:                                              ; preds = %761, %712, %661, %608
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #9
  br label %791

768:                                              ; preds = %603
  br label %769

769:                                              ; preds = %768
  store i8 0, ptr %67, align 1, !tbaa !9
  br label %589, !llvm.loop !48

770:                                              ; preds = %592
  %771 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %82, i32 0, i32 0
  %772 = load ptr, ptr %53, align 8, !tbaa !5
  %773 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %772, i32 0, i32 0
  %774 = load i8, ptr %773, align 8, !tbaa !49, !range !11, !noundef !12
  %775 = trunc i8 %774 to i1
  %776 = zext i1 %775 to i8
  store i8 %776, ptr %771, align 8, !tbaa !49
  %777 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %82, i32 0, i32 1
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %777, ptr noundef nonnull align 8 dereferenceable(24) %54) #9
  %778 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %82, i32 0, i32 2
  call void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %778, ptr noundef nonnull align 8 dereferenceable(24) %60) #9
  %779 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %82, i32 0, i32 3
  call void @_ZN3HIR25TypeData_ErasedType_InnerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(104) %779, ptr noundef nonnull align 8 dereferenceable(104) %66) #9
  invoke void @_ZN3HIR8TypeDataC2ENS_19TypeData_ErasedTypeE(ptr noundef nonnull align 8 dereferenceable(184) %81, ptr noundef %82)
          to label %780 unwind label %782

780:                                              ; preds = %770
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %81)
          to label %781 unwind label %786

781:                                              ; preds = %780
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %81) #9
  call void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160) %82) #9
  store i32 1, ptr %12, align 4
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %66) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr %66) #9
  call void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %60) #9
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %54) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %54) #9
  br label %796

782:                                              ; preds = %770
  %783 = landingpad { ptr, i32 }
          cleanup
  %784 = extractvalue { ptr, i32 } %783, 0
  store ptr %784, ptr %19, align 8
  %785 = extractvalue { ptr, i32 } %783, 1
  store i32 %785, ptr %20, align 4
  br label %790

786:                                              ; preds = %780
  %787 = landingpad { ptr, i32 }
          cleanup
  %788 = extractvalue { ptr, i32 } %787, 0
  store ptr %788, ptr %19, align 8
  %789 = extractvalue { ptr, i32 } %787, 1
  store i32 %789, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %81) #9
  br label %790

790:                                              ; preds = %786, %782
  call void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160) %82) #9
  br label %791

791:                                              ; preds = %790, %767
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %66) #9
  br label %792

792:                                              ; preds = %791, %593
  call void @llvm.lifetime.end.p0(i64 104, ptr %66) #9
  br label %793

793:                                              ; preds = %792, %583
  call void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %60) #9
  br label %794

794:                                              ; preds = %793, %557, %535
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %54) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #9
  br label %1275

795:                                              ; No predecessors!
  store i8 0, ptr %52, align 1, !tbaa !9
  br label %514, !llvm.loop !61

796:                                              ; preds = %781, %518
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  %797 = load i32, ptr %12, align 4
  switch i32 %797, label %800 [
    i32 52, label %798
  ]

798:                                              ; preds = %796
  br label %799

799:                                              ; preds = %798
  store i8 0, ptr %52, align 1, !tbaa !9
  br label %507, !llvm.loop !62

800:                                              ; preds = %796, %510
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #9
  %801 = load i32, ptr %12, align 4
  switch i32 %801, label %1273 [
    i32 49, label %802
  ]

802:                                              ; preds = %800
  br label %1271

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

804:                                              ; preds = %851, %803
  %805 = load i8, ptr %83, align 1, !tbaa !9, !range !11, !noundef !12
  %806 = trunc i8 %805 to i1
  br i1 %806, label %808, label %807

807:                                              ; preds = %804
  store i32 84, ptr %12, align 4
  br label %852

808:                                              ; preds = %804
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #9
  %809 = load ptr, ptr %13, align 8, !tbaa !5
  %810 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %809)
  store ptr %810, ptr %84, align 8, !tbaa !5
  br label %811

811:                                              ; preds = %846, %808
  %812 = load ptr, ptr %84, align 8, !tbaa !5
  %813 = load i8, ptr %83, align 1, !tbaa !9, !range !11, !noundef !12
  %814 = trunc i8 %813 to i1
  br i1 %814, label %816, label %815

815:                                              ; preds = %811
  store i32 87, ptr %12, align 4
  br label %847

816:                                              ; preds = %811
  %817 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %86, i32 0, i32 0
  %818 = load ptr, ptr %8, align 8, !tbaa !5
  %819 = load ptr, ptr %84, align 8, !tbaa !5
  %820 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %819, i32 0, i32 0
  %821 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %822 = trunc i8 %821 to i1
  %823 = load ptr, ptr %133, align 8, !tbaa !29
  %824 = getelementptr inbounds ptr, ptr %823, i64 5
  %825 = load ptr, ptr %824, align 8
  call void %825(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %817, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %818, ptr noundef nonnull align 8 dereferenceable(8) %820, i1 noundef zeroext %822)
  %826 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %86, i32 0, i32 1
  %827 = load ptr, ptr %8, align 8, !tbaa !5
  %828 = load ptr, ptr %84, align 8, !tbaa !5
  %829 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %828, i32 0, i32 1
  invoke void @_ZNK13Monomorphiser19monomorph_arraysizeERK4SpanRKN3HIR9ArraySizeE(ptr dead_on_unwind writable sret(%"class.HIR::ArraySize") align 8 %826, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %827, ptr noundef nonnull align 8 dereferenceable(32) %829)
          to label %830 unwind label %833

830:                                              ; preds = %816
  invoke void @_ZN3HIR8TypeData10make_ArrayENS0_10Data_ArrayE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %85, ptr noundef %86)
          to label %831 unwind label %837

831:                                              ; preds = %830
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %85)
          to label %832 unwind label %841

832:                                              ; preds = %831
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %85) #9
  call void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %86) #9
  store i32 1, ptr %12, align 4
  br label %847

833:                                              ; preds = %816
  %834 = landingpad { ptr, i32 }
          cleanup
  %835 = extractvalue { ptr, i32 } %834, 0
  store ptr %835, ptr %19, align 8
  %836 = extractvalue { ptr, i32 } %834, 1
  store i32 %836, ptr %20, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %817) #9
  br label %849

837:                                              ; preds = %830
  %838 = landingpad { ptr, i32 }
          cleanup
  %839 = extractvalue { ptr, i32 } %838, 0
  store ptr %839, ptr %19, align 8
  %840 = extractvalue { ptr, i32 } %838, 1
  store i32 %840, ptr %20, align 4
  br label %845

841:                                              ; preds = %831
  %842 = landingpad { ptr, i32 }
          cleanup
  %843 = extractvalue { ptr, i32 } %842, 0
  store ptr %843, ptr %19, align 8
  %844 = extractvalue { ptr, i32 } %842, 1
  store i32 %844, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %85) #9
  br label %845

845:                                              ; preds = %841, %837
  call void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %86) #9
  br label %849

846:                                              ; No predecessors!
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %811, !llvm.loop !63

847:                                              ; preds = %832, %815
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #9
  %848 = load i32, ptr %12, align 4
  switch i32 %848, label %852 [
    i32 87, label %850
  ]

849:                                              ; preds = %845, %833
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #9
  br label %1275

850:                                              ; preds = %847
  br label %851

851:                                              ; preds = %850
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %804, !llvm.loop !64

852:                                              ; preds = %847, %807
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #9
  %853 = load i32, ptr %12, align 4
  switch i32 %853, label %1273 [
    i32 84, label %854
  ]

854:                                              ; preds = %852
  br label %1271

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

856:                                              ; preds = %886, %855
  %857 = load i8, ptr %87, align 1, !tbaa !9, !range !11, !noundef !12
  %858 = trunc i8 %857 to i1
  br i1 %858, label %860, label %859

859:                                              ; preds = %856
  store i32 90, ptr %12, align 4
  br label %887

860:                                              ; preds = %856
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #9
  %861 = load ptr, ptr %13, align 8, !tbaa !5
  %862 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %861)
  store ptr %862, ptr %88, align 8, !tbaa !5
  br label %863

863:                                              ; preds = %882, %860
  %864 = load ptr, ptr %88, align 8, !tbaa !5
  %865 = load i8, ptr %87, align 1, !tbaa !9, !range !11, !noundef !12
  %866 = trunc i8 %865 to i1
  br i1 %866, label %868, label %867

867:                                              ; preds = %863
  store i32 93, ptr %12, align 4
  br label %883

868:                                              ; preds = %863
  %869 = load ptr, ptr %8, align 8, !tbaa !5
  %870 = load ptr, ptr %88, align 8, !tbaa !5
  %871 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %870, i32 0, i32 0
  %872 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %873 = trunc i8 %872 to i1
  %874 = load ptr, ptr %133, align 8, !tbaa !29
  %875 = getelementptr inbounds ptr, ptr %874, i64 5
  %876 = load ptr, ptr %875, align 8
  call void %876(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %89, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %869, ptr noundef nonnull align 8 dereferenceable(8) %871, i1 noundef zeroext %873)
  invoke void @_ZN3HIR7TypeRef9new_sliceES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef %89)
          to label %877 unwind label %878

877:                                              ; preds = %868
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %89) #9
  store i32 1, ptr %12, align 4
  br label %883

878:                                              ; preds = %868
  %879 = landingpad { ptr, i32 }
          cleanup
  %880 = extractvalue { ptr, i32 } %879, 0
  store ptr %880, ptr %19, align 8
  %881 = extractvalue { ptr, i32 } %879, 1
  store i32 %881, ptr %20, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %89) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #9
  br label %1275

882:                                              ; No predecessors!
  store i8 0, ptr %87, align 1, !tbaa !9
  br label %863, !llvm.loop !65

883:                                              ; preds = %877, %867
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  %884 = load i32, ptr %12, align 4
  switch i32 %884, label %887 [
    i32 93, label %885
  ]

885:                                              ; preds = %883
  br label %886

886:                                              ; preds = %885
  store i8 0, ptr %87, align 1, !tbaa !9
  br label %856, !llvm.loop !66

887:                                              ; preds = %883, %859
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #9
  %888 = load i32, ptr %12, align 4
  switch i32 %888, label %1273 [
    i32 90, label %889
  ]

889:                                              ; preds = %887
  br label %1271

890:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %90) #9
  store i8 1, ptr %90, align 1, !tbaa !9
  br label %891

891:                                              ; preds = %947, %890
  %892 = load i8, ptr %90, align 1, !tbaa !9, !range !11, !noundef !12
  %893 = trunc i8 %892 to i1
  br i1 %893, label %895, label %894

894:                                              ; preds = %891
  store i32 96, ptr %12, align 4
  br label %948

895:                                              ; preds = %891
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #9
  %896 = load ptr, ptr %13, align 8, !tbaa !5
  %897 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %896)
  store ptr %897, ptr %91, align 8, !tbaa !5
  br label %898

898:                                              ; preds = %943, %895
  %899 = load ptr, ptr %91, align 8, !tbaa !5
  %900 = load i8, ptr %90, align 1, !tbaa !9, !range !11, !noundef !12
  %901 = trunc i8 %900 to i1
  br i1 %901, label %903, label %902

902:                                              ; preds = %898
  store i32 99, ptr %12, align 4
  br label %944

903:                                              ; preds = %898
  call void @llvm.lifetime.start.p0(i64 24, ptr %92) #9
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %92) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #9
  %904 = load ptr, ptr %91, align 8, !tbaa !5
  store ptr %904, ptr %93, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #9
  %905 = load ptr, ptr %93, align 8, !tbaa !5
  %906 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %905) #9
  %907 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.70", ptr %94, i32 0, i32 0
  store ptr %906, ptr %907, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #9
  %908 = load ptr, ptr %93, align 8, !tbaa !5
  %909 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %908) #9
  %910 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.70", ptr %95, i32 0, i32 0
  store ptr %909, ptr %910, align 8
  br label %911

911:                                              ; preds = %925, %903
  %912 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef nonnull align 8 dereferenceable(8) %95) #9
  br i1 %912, label %914, label %913

913:                                              ; preds = %911
  store i32 102, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  br label %936

914:                                              ; preds = %911
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #9
  %915 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %94) #9
  store ptr %915, ptr %96, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #9
  %916 = load ptr, ptr %8, align 8, !tbaa !5
  %917 = load ptr, ptr %96, align 8, !tbaa !5
  %918 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %919 = trunc i8 %918 to i1
  %920 = load ptr, ptr %133, align 8, !tbaa !29
  %921 = getelementptr inbounds ptr, ptr %920, i64 5
  %922 = load ptr, ptr %921, align 8
  invoke void %922(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %97, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %916, ptr noundef nonnull align 8 dereferenceable(8) %917, i1 noundef zeroext %919)
          to label %923 unwind label %927

923:                                              ; preds = %914
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %92, ptr noundef nonnull align 8 dereferenceable(8) %97)
          to label %924 unwind label %931

924:                                              ; preds = %923
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %97) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  br label %925

925:                                              ; preds = %924
  %926 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %94) #9
  br label %911

927:                                              ; preds = %914
  %928 = landingpad { ptr, i32 }
          cleanup
  %929 = extractvalue { ptr, i32 } %928, 0
  store ptr %929, ptr %19, align 8
  %930 = extractvalue { ptr, i32 } %928, 1
  store i32 %930, ptr %20, align 4
  br label %935

931:                                              ; preds = %923
  %932 = landingpad { ptr, i32 }
          cleanup
  %933 = extractvalue { ptr, i32 } %932, 0
  store ptr %933, ptr %19, align 8
  %934 = extractvalue { ptr, i32 } %932, 1
  store i32 %934, ptr %20, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %97) #9
  br label %935

935:                                              ; preds = %931, %927
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  br label %942

936:                                              ; preds = %913
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %98, ptr noundef nonnull align 8 dereferenceable(24) %92) #9
  invoke void @_ZN3HIR7TypeRefC2ESt6vectorIS0_SaIS0_EE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %98)
          to label %937 unwind label %938

937:                                              ; preds = %936
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %98) #9
  store i32 1, ptr %12, align 4
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %92) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %92) #9
  br label %944

938:                                              ; preds = %936
  %939 = landingpad { ptr, i32 }
          cleanup
  %940 = extractvalue { ptr, i32 } %939, 0
  store ptr %940, ptr %19, align 8
  %941 = extractvalue { ptr, i32 } %939, 1
  store i32 %941, ptr %20, align 4
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %98) #9
  br label %942

942:                                              ; preds = %938, %935
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %92) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #9
  br label %1275

943:                                              ; No predecessors!
  store i8 0, ptr %90, align 1, !tbaa !9
  br label %898, !llvm.loop !67

944:                                              ; preds = %937, %902
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  %945 = load i32, ptr %12, align 4
  switch i32 %945, label %948 [
    i32 99, label %946
  ]

946:                                              ; preds = %944
  br label %947

947:                                              ; preds = %946
  store i8 0, ptr %90, align 1, !tbaa !9
  br label %891, !llvm.loop !68

948:                                              ; preds = %944, %894
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #9
  %949 = load i32, ptr %12, align 4
  switch i32 %949, label %1273 [
    i32 96, label %950
  ]

950:                                              ; preds = %948
  br label %1271

951:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %99) #9
  store i8 1, ptr %99, align 1, !tbaa !9
  br label %952

952:                                              ; preds = %996, %951
  %953 = load i8, ptr %99, align 1, !tbaa !9, !range !11, !noundef !12
  %954 = trunc i8 %953 to i1
  br i1 %954, label %956, label %955

955:                                              ; preds = %952
  store i32 104, ptr %12, align 4
  br label %997

956:                                              ; preds = %952
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #9
  %957 = load ptr, ptr %13, align 8, !tbaa !5
  %958 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %957)
  store ptr %958, ptr %100, align 8, !tbaa !5
  br label %959

959:                                              ; preds = %992, %956
  %960 = load ptr, ptr %100, align 8, !tbaa !5
  %961 = load i8, ptr %99, align 1, !tbaa !9, !range !11, !noundef !12
  %962 = trunc i8 %961 to i1
  br i1 %962, label %964, label %963

963:                                              ; preds = %959
  store i32 107, ptr %12, align 4
  br label %993

964:                                              ; preds = %959
  %965 = load ptr, ptr %100, align 8, !tbaa !5
  %966 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %965, i32 0, i32 1
  %967 = load i32, ptr %966, align 4, !tbaa !69
  %968 = load ptr, ptr %8, align 8, !tbaa !5
  %969 = load ptr, ptr %100, align 8, !tbaa !5
  %970 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %969, i32 0, i32 2
  %971 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %972 = trunc i8 %971 to i1
  %973 = load ptr, ptr %133, align 8, !tbaa !29
  %974 = getelementptr inbounds ptr, ptr %973, i64 5
  %975 = load ptr, ptr %974, align 8
  call void %975(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %101, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %968, ptr noundef nonnull align 8 dereferenceable(8) %970, i1 noundef zeroext %972)
  %976 = load ptr, ptr %8, align 8, !tbaa !5
  %977 = load ptr, ptr %100, align 8, !tbaa !5
  %978 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %977, i32 0, i32 0
  %979 = load ptr, ptr %133, align 8, !tbaa !29
  %980 = getelementptr inbounds ptr, ptr %979, i64 6
  %981 = load ptr, ptr %980, align 8
  %982 = invoke i32 %981(ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %976, ptr noundef nonnull align 4 dereferenceable(4) %978)
          to label %983 unwind label %988

983:                                              ; preds = %964
  %984 = getelementptr inbounds %"struct.HIR::LifetimeRef", ptr %102, i32 0, i32 0
  store i32 %982, ptr %984, align 4
  %985 = getelementptr inbounds %"struct.HIR::LifetimeRef", ptr %102, i32 0, i32 0
  %986 = load i32, ptr %985, align 4
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_NS_11LifetimeRefE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef %967, ptr noundef %101, i32 %986)
          to label %987 unwind label %988

987:                                              ; preds = %983
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  store i32 1, ptr %12, align 4
  br label %993

988:                                              ; preds = %983, %964
  %989 = landingpad { ptr, i32 }
          cleanup
  %990 = extractvalue { ptr, i32 } %989, 0
  store ptr %990, ptr %19, align 8
  %991 = extractvalue { ptr, i32 } %989, 1
  store i32 %991, ptr %20, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %99) #9
  br label %1275

992:                                              ; No predecessors!
  store i8 0, ptr %99, align 1, !tbaa !9
  br label %959, !llvm.loop !74

993:                                              ; preds = %987, %963
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  %994 = load i32, ptr %12, align 4
  switch i32 %994, label %997 [
    i32 107, label %995
  ]

995:                                              ; preds = %993
  br label %996

996:                                              ; preds = %995
  store i8 0, ptr %99, align 1, !tbaa !9
  br label %952, !llvm.loop !75

997:                                              ; preds = %993, %955
  call void @llvm.lifetime.end.p0(i64 1, ptr %99) #9
  %998 = load i32, ptr %12, align 4
  switch i32 %998, label %1273 [
    i32 104, label %999
  ]

999:                                              ; preds = %997
  br label %1271

1000:                                             ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %103) #9
  store i8 1, ptr %103, align 1, !tbaa !9
  br label %1001

1001:                                             ; preds = %1034, %1000
  %1002 = load i8, ptr %103, align 1, !tbaa !9, !range !11, !noundef !12
  %1003 = trunc i8 %1002 to i1
  br i1 %1003, label %1005, label %1004

1004:                                             ; preds = %1001
  store i32 110, ptr %12, align 4
  br label %1035

1005:                                             ; preds = %1001
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #9
  %1006 = load ptr, ptr %13, align 8, !tbaa !5
  %1007 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %1006)
  store ptr %1007, ptr %104, align 8, !tbaa !5
  br label %1008

1008:                                             ; preds = %1030, %1005
  %1009 = load ptr, ptr %104, align 8, !tbaa !5
  %1010 = load i8, ptr %103, align 1, !tbaa !9, !range !11, !noundef !12
  %1011 = trunc i8 %1010 to i1
  br i1 %1011, label %1013, label %1012

1012:                                             ; preds = %1008
  store i32 113, ptr %12, align 4
  br label %1031

1013:                                             ; preds = %1008
  %1014 = load ptr, ptr %104, align 8, !tbaa !5
  %1015 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %1014, i32 0, i32 0
  %1016 = load i32, ptr %1015, align 8, !tbaa !76
  %1017 = load ptr, ptr %8, align 8, !tbaa !5
  %1018 = load ptr, ptr %104, align 8, !tbaa !5
  %1019 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %1018, i32 0, i32 1
  %1020 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %1021 = trunc i8 %1020 to i1
  %1022 = load ptr, ptr %133, align 8, !tbaa !29
  %1023 = getelementptr inbounds ptr, ptr %1022, i64 5
  %1024 = load ptr, ptr %1023, align 8
  call void %1024(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %105, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %1017, ptr noundef nonnull align 8 dereferenceable(8) %1019, i1 noundef zeroext %1021)
  invoke void @_ZN3HIR7TypeRef11new_pointerENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef %1016, ptr noundef %105)
          to label %1025 unwind label %1026

1025:                                             ; preds = %1013
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #9
  store i32 1, ptr %12, align 4
  br label %1031

1026:                                             ; preds = %1013
  %1027 = landingpad { ptr, i32 }
          cleanup
  %1028 = extractvalue { ptr, i32 } %1027, 0
  store ptr %1028, ptr %19, align 8
  %1029 = extractvalue { ptr, i32 } %1027, 1
  store i32 %1029, ptr %20, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #9
  br label %1275

1030:                                             ; No predecessors!
  store i8 0, ptr %103, align 1, !tbaa !9
  br label %1008, !llvm.loop !78

1031:                                             ; preds = %1025, %1012
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  %1032 = load i32, ptr %12, align 4
  switch i32 %1032, label %1035 [
    i32 113, label %1033
  ]

1033:                                             ; preds = %1031
  br label %1034

1034:                                             ; preds = %1033
  store i8 0, ptr %103, align 1, !tbaa !9
  br label %1001, !llvm.loop !79

1035:                                             ; preds = %1031, %1004
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #9
  %1036 = load i32, ptr %12, align 4
  switch i32 %1036, label %1273 [
    i32 110, label %1037
  ]

1037:                                             ; preds = %1035
  br label %1271

1038:                                             ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %106) #9
  store i8 1, ptr %106, align 1, !tbaa !9
  br label %1039

1039:                                             ; preds = %1082, %1038
  %1040 = load i8, ptr %106, align 1, !tbaa !9, !range !11, !noundef !12
  %1041 = trunc i8 %1040 to i1
  br i1 %1041, label %1043, label %1042

1042:                                             ; preds = %1039
  store i32 116, ptr %12, align 4
  br label %1083

1043:                                             ; preds = %1039
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #9
  %1044 = load ptr, ptr %13, align 8, !tbaa !5
  %1045 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %1044)
  store ptr %1045, ptr %107, align 8, !tbaa !5
  br label %1046

1046:                                             ; preds = %1077, %1043
  %1047 = load ptr, ptr %107, align 8, !tbaa !5
  %1048 = load i8, ptr %106, align 1, !tbaa !9, !range !11, !noundef !12
  %1049 = trunc i8 %1048 to i1
  br i1 %1049, label %1051, label %1050

1050:                                             ; preds = %1046
  store i32 119, ptr %12, align 4
  br label %1078

1051:                                             ; preds = %1046
  %1052 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %109, i32 0, i32 0
  %1053 = load ptr, ptr %8, align 8, !tbaa !5
  %1054 = load ptr, ptr %107, align 8, !tbaa !5
  %1055 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %1054, i32 0, i32 0
  %1056 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %1057 = trunc i8 %1056 to i1
  call void @_ZNK13Monomorphiser14monomorph_pathERK4SpanRKN3HIR4PathEb(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %1052, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %1053, ptr noundef nonnull align 8 dereferenceable(88) %1055, i1 noundef zeroext %1057)
  %1058 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %109, i32 0, i32 1
  %1059 = load ptr, ptr %107, align 8, !tbaa !5
  %1060 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %1059, i32 0, i32 1
  invoke void @_ZNK3HIR25TypeData_NamedFunction_Ty5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8 %1058, ptr noundef nonnull align 8 dereferenceable(24) %1060)
          to label %1061 unwind label %1064

1061:                                             ; preds = %1051
  invoke void @_ZN3HIR8TypeDataC2ENS0_18Data_NamedFunctionE(ptr noundef nonnull align 8 dereferenceable(184) %108, ptr noundef %109)
          to label %1062 unwind label %1068

1062:                                             ; preds = %1061
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %108)
          to label %1063 unwind label %1072

1063:                                             ; preds = %1062
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %108) #9
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %109) #9
  store i32 1, ptr %12, align 4
  br label %1078

1064:                                             ; preds = %1051
  %1065 = landingpad { ptr, i32 }
          cleanup
  %1066 = extractvalue { ptr, i32 } %1065, 0
  store ptr %1066, ptr %19, align 8
  %1067 = extractvalue { ptr, i32 } %1065, 1
  store i32 %1067, ptr %20, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %1052) #9
  br label %1080

1068:                                             ; preds = %1061
  %1069 = landingpad { ptr, i32 }
          cleanup
  %1070 = extractvalue { ptr, i32 } %1069, 0
  store ptr %1070, ptr %19, align 8
  %1071 = extractvalue { ptr, i32 } %1069, 1
  store i32 %1071, ptr %20, align 4
  br label %1076

1072:                                             ; preds = %1062
  %1073 = landingpad { ptr, i32 }
          cleanup
  %1074 = extractvalue { ptr, i32 } %1073, 0
  store ptr %1074, ptr %19, align 8
  %1075 = extractvalue { ptr, i32 } %1073, 1
  store i32 %1075, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %108) #9
  br label %1076

1076:                                             ; preds = %1072, %1068
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %109) #9
  br label %1080

1077:                                             ; No predecessors!
  store i8 0, ptr %106, align 1, !tbaa !9
  br label %1046, !llvm.loop !80

1078:                                             ; preds = %1063, %1050
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  %1079 = load i32, ptr %12, align 4
  switch i32 %1079, label %1083 [
    i32 119, label %1081
  ]

1080:                                             ; preds = %1076, %1064
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %106) #9
  br label %1275

1081:                                             ; preds = %1078
  br label %1082

1082:                                             ; preds = %1081
  store i8 0, ptr %106, align 1, !tbaa !9
  br label %1039, !llvm.loop !81

1083:                                             ; preds = %1078, %1042
  call void @llvm.lifetime.end.p0(i64 1, ptr %106) #9
  %1084 = load i32, ptr %12, align 4
  switch i32 %1084, label %1273 [
    i32 116, label %1085
  ]

1085:                                             ; preds = %1083
  br label %1271

1086:                                             ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %110) #9
  store i8 1, ptr %110, align 1, !tbaa !9
  br label %1087

1087:                                             ; preds = %1201, %1086
  %1088 = load i8, ptr %110, align 1, !tbaa !9, !range !11, !noundef !12
  %1089 = trunc i8 %1088 to i1
  br i1 %1089, label %1091, label %1090

1090:                                             ; preds = %1087
  store i32 122, ptr %12, align 4
  br label %1202

1091:                                             ; preds = %1087
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #9
  %1092 = load ptr, ptr %13, align 8, !tbaa !5
  %1093 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %1092)
  store ptr %1093, ptr %111, align 8, !tbaa !5
  br label %1094

1094:                                             ; preds = %1197, %1091
  %1095 = load ptr, ptr %111, align 8, !tbaa !5
  %1096 = load i8, ptr %110, align 1, !tbaa !9, !range !11, !noundef !12
  %1097 = trunc i8 %1096 to i1
  br i1 %1097, label %1099, label %1098

1098:                                             ; preds = %1094
  store i32 125, ptr %12, align 4
  br label %1198

1099:                                             ; preds = %1094
  %1100 = getelementptr inbounds %class.Monomorphiser, ptr %133, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #9
  %1101 = load ptr, ptr %111, align 8, !tbaa !5
  %1102 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1101, i32 0, i32 0
  store ptr %1102, ptr %112, align 8, !tbaa !5
  call void @_ZNSt6vectorIPKN3HIR13GenericParamsESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %1100, ptr noundef nonnull align 8 dereferenceable(8) %112)
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #9
  call void @llvm.lifetime.start.p0(i64 144, ptr %113) #9
  call void @_ZN3HIR24TypeData_FunctionPointerC2Ev(ptr noundef nonnull align 8 dereferenceable(144) %113)
  call void @llvm.lifetime.start.p0(i64 96, ptr %114) #9
  %1103 = load ptr, ptr %111, align 8, !tbaa !5
  %1104 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1103, i32 0, i32 0
  invoke void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8 %114, ptr noundef nonnull align 8 dereferenceable(96) %1104)
          to label %1105 unwind label %1148

1105:                                             ; preds = %1099
  %1106 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %113, i32 0, i32 0
  %1107 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZN3HIR13GenericParamsaSEOS0_(ptr noundef nonnull align 8 dereferenceable(96) %1106, ptr noundef nonnull align 8 dereferenceable(96) %114) #9
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %114) #9
  call void @llvm.lifetime.end.p0(i64 96, ptr %114) #9
  %1108 = load ptr, ptr %111, align 8, !tbaa !5
  %1109 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1108, i32 0, i32 1
  %1110 = load i8, ptr %1109, align 8, !tbaa !82, !range !11, !noundef !12
  %1111 = trunc i8 %1110 to i1
  %1112 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %113, i32 0, i32 1
  %1113 = zext i1 %1111 to i8
  store i8 %1113, ptr %1112, align 8, !tbaa !82
  %1114 = load ptr, ptr %111, align 8, !tbaa !5
  %1115 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1114, i32 0, i32 2
  %1116 = load i8, ptr %1115, align 1, !tbaa !106, !range !11, !noundef !12
  %1117 = trunc i8 %1116 to i1
  %1118 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %113, i32 0, i32 2
  %1119 = zext i1 %1117 to i8
  store i8 %1119, ptr %1118, align 1, !tbaa !106
  %1120 = load ptr, ptr %111, align 8, !tbaa !5
  %1121 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1120, i32 0, i32 3
  %1122 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %113, i32 0, i32 3
  %1123 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN8RcStringaSERKS_(ptr noundef nonnull align 8 dereferenceable(8) %1122, ptr noundef nonnull align 8 dereferenceable(8) %1121)
          to label %1124 unwind label %1152

1124:                                             ; preds = %1105
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #9
  %1125 = load ptr, ptr %8, align 8, !tbaa !5
  %1126 = load ptr, ptr %111, align 8, !tbaa !5
  %1127 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1126, i32 0, i32 4
  %1128 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %1129 = trunc i8 %1128 to i1
  %1130 = load ptr, ptr %133, align 8, !tbaa !29
  %1131 = getelementptr inbounds ptr, ptr %1130, i64 5
  %1132 = load ptr, ptr %1131, align 8
  invoke void %1132(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %115, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %1125, ptr noundef nonnull align 8 dereferenceable(8) %1127, i1 noundef zeroext %1129)
          to label %1133 unwind label %1156

1133:                                             ; preds = %1124
  %1134 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %113, i32 0, i32 4
  %1135 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %1134, ptr noundef nonnull align 8 dereferenceable(8) %115)
          to label %1136 unwind label %1160

1136:                                             ; preds = %1133
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %115) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #9
  %1137 = load ptr, ptr %111, align 8, !tbaa !5
  %1138 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1137, i32 0, i32 5
  store ptr %1138, ptr %116, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #9
  %1139 = load ptr, ptr %116, align 8, !tbaa !5
  %1140 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1139) #9
  %1141 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.70", ptr %117, i32 0, i32 0
  store ptr %1140, ptr %1141, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #9
  %1142 = load ptr, ptr %116, align 8, !tbaa !5
  %1143 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1142) #9
  %1144 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.70", ptr %118, i32 0, i32 0
  store ptr %1143, ptr %1144, align 8
  br label %1145

1145:                                             ; preds = %1177, %1136
  %1146 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef nonnull align 8 dereferenceable(8) %118) #9
  br i1 %1146, label %1165, label %1147

1147:                                             ; preds = %1145
  store i32 128, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  br label %1188

1148:                                             ; preds = %1099
  %1149 = landingpad { ptr, i32 }
          cleanup
  %1150 = extractvalue { ptr, i32 } %1149, 0
  store ptr %1150, ptr %19, align 8
  %1151 = extractvalue { ptr, i32 } %1149, 1
  store i32 %1151, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 96, ptr %114) #9
  br label %1196

1152:                                             ; preds = %1188, %1105
  %1153 = landingpad { ptr, i32 }
          cleanup
  %1154 = extractvalue { ptr, i32 } %1153, 0
  store ptr %1154, ptr %19, align 8
  %1155 = extractvalue { ptr, i32 } %1153, 1
  store i32 %1155, ptr %20, align 4
  br label %1196

1156:                                             ; preds = %1124
  %1157 = landingpad { ptr, i32 }
          cleanup
  %1158 = extractvalue { ptr, i32 } %1157, 0
  store ptr %1158, ptr %19, align 8
  %1159 = extractvalue { ptr, i32 } %1157, 1
  store i32 %1159, ptr %20, align 4
  br label %1164

1160:                                             ; preds = %1133
  %1161 = landingpad { ptr, i32 }
          cleanup
  %1162 = extractvalue { ptr, i32 } %1161, 0
  store ptr %1162, ptr %19, align 8
  %1163 = extractvalue { ptr, i32 } %1161, 1
  store i32 %1163, ptr %20, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %115) #9
  br label %1164

1164:                                             ; preds = %1160, %1156
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #9
  br label %1196

1165:                                             ; preds = %1145
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #9
  %1166 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %117) #9
  store ptr %1166, ptr %119, align 8, !tbaa !5
  %1167 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %113, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #9
  %1168 = load ptr, ptr %8, align 8, !tbaa !5
  %1169 = load ptr, ptr %119, align 8, !tbaa !5
  %1170 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %1171 = trunc i8 %1170 to i1
  %1172 = load ptr, ptr %133, align 8, !tbaa !29
  %1173 = getelementptr inbounds ptr, ptr %1172, i64 5
  %1174 = load ptr, ptr %1173, align 8
  invoke void %1174(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %120, ptr noundef nonnull align 8 dereferenceable(96) %133, ptr noundef nonnull align 8 dereferenceable(8) %1168, ptr noundef nonnull align 8 dereferenceable(8) %1169, i1 noundef zeroext %1171)
          to label %1175 unwind label %1179

1175:                                             ; preds = %1165
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %1167, ptr noundef nonnull align 8 dereferenceable(8) %120)
          to label %1176 unwind label %1183

1176:                                             ; preds = %1175
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %120) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #9
  br label %1177

1177:                                             ; preds = %1176
  %1178 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %117) #9
  br label %1145

1179:                                             ; preds = %1165
  %1180 = landingpad { ptr, i32 }
          cleanup
  %1181 = extractvalue { ptr, i32 } %1180, 0
  store ptr %1181, ptr %19, align 8
  %1182 = extractvalue { ptr, i32 } %1180, 1
  store i32 %1182, ptr %20, align 4
  br label %1187

1183:                                             ; preds = %1175
  %1184 = landingpad { ptr, i32 }
          cleanup
  %1185 = extractvalue { ptr, i32 } %1184, 0
  store ptr %1185, ptr %19, align 8
  %1186 = extractvalue { ptr, i32 } %1184, 1
  store i32 %1186, ptr %20, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %120) #9
  br label %1187

1187:                                             ; preds = %1183, %1179
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  br label %1196

1188:                                             ; preds = %1147
  %1189 = getelementptr inbounds %class.Monomorphiser, ptr %133, i32 0, i32 3
  call void @_ZNSt6vectorIPKN3HIR13GenericParamsESaIS3_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %1189) #9
  invoke void @_ZN3HIR24TypeData_FunctionPointerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(144) %121, ptr noundef nonnull align 8 dereferenceable(144) %113)
          to label %1190 unwind label %1152

1190:                                             ; preds = %1188
  invoke void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %121)
          to label %1191 unwind label %1192

1191:                                             ; preds = %1190
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %121) #9
  store i32 1, ptr %12, align 4
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %113) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %113) #9
  br label %1198

1192:                                             ; preds = %1190
  %1193 = landingpad { ptr, i32 }
          cleanup
  %1194 = extractvalue { ptr, i32 } %1193, 0
  store ptr %1194, ptr %19, align 8
  %1195 = extractvalue { ptr, i32 } %1193, 1
  store i32 %1195, ptr %20, align 4
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %121) #9
  br label %1196

1196:                                             ; preds = %1192, %1187, %1164, %1152, %1148
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %113) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %110) #9
  br label %1275

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

1198:                                             ; preds = %1191, %1098
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  %1199 = load i32, ptr %12, align 4
  switch i32 %1199, label %1202 [
    i32 125, label %1200
  ]

1200:                                             ; preds = %1198
  br label %1201

1201:                                             ; preds = %1200
  store i8 0, ptr %110, align 1, !tbaa !9
  br label %1087, !llvm.loop !108

1202:                                             ; preds = %1198, %1090
  call void @llvm.lifetime.end.p0(i64 1, ptr %110) #9
  %1203 = load i32, ptr %12, align 4
  switch i32 %1203, label %1273 [
    i32 122, label %1204
  ]

1204:                                             ; preds = %1202
  br label %1271

1205:                                             ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %122) #9
  store i8 1, ptr %122, align 1, !tbaa !9
  br label %1206

1206:                                             ; preds = %1234, %1205
  %1207 = load i8, ptr %122, align 1, !tbaa !9, !range !11, !noundef !12
  %1208 = trunc i8 %1207 to i1
  br i1 %1208, label %1210, label %1209

1209:                                             ; preds = %1206
  store i32 130, ptr %12, align 4
  br label %1235

1210:                                             ; preds = %1206
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #9
  %1211 = load ptr, ptr %13, align 8, !tbaa !5
  %1212 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %1211)
  store ptr %1212, ptr %123, align 8, !tbaa !5
  br label %1213

1213:                                             ; preds = %1230, %1210
  %1214 = load ptr, ptr %123, align 8, !tbaa !5
  %1215 = load i8, ptr %122, align 1, !tbaa !9, !range !11, !noundef !12
  %1216 = trunc i8 %1215 to i1
  br i1 %1216, label %1218, label %1217

1217:                                             ; preds = %1213
  store i32 133, ptr %12, align 4
  br label %1231

1218:                                             ; preds = %1213
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #9
  %1219 = load ptr, ptr %123, align 8, !tbaa !5
  %1220 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %1219, i32 0, i32 0
  %1221 = load ptr, ptr %1220, align 8, !tbaa !109
  %1222 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %124, i32 0, i32 0
  store ptr %1221, ptr %1222, align 8, !tbaa !109
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %126, ptr align 8 %124, i64 8, i1 false), !tbaa.struct !111
  %1223 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %126, i32 0, i32 0
  %1224 = load ptr, ptr %1223, align 8
  call void @_ZN3HIR8TypeDataC2ENS0_12Data_ClosureE(ptr noundef nonnull align 8 dereferenceable(184) %125, ptr %1224)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %125)
          to label %1225 unwind label %1226

1225:                                             ; preds = %1218
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %125) #9
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  br label %1231

1226:                                             ; preds = %1218
  %1227 = landingpad { ptr, i32 }
          cleanup
  %1228 = extractvalue { ptr, i32 } %1227, 0
  store ptr %1228, ptr %19, align 8
  %1229 = extractvalue { ptr, i32 } %1227, 1
  store i32 %1229, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %125) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %122) #9
  br label %1275

1230:                                             ; No predecessors!
  store i8 0, ptr %122, align 1, !tbaa !9
  br label %1213, !llvm.loop !112

1231:                                             ; preds = %1225, %1217
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #9
  %1232 = load i32, ptr %12, align 4
  switch i32 %1232, label %1235 [
    i32 133, label %1233
  ]

1233:                                             ; preds = %1231
  br label %1234

1234:                                             ; preds = %1233
  store i8 0, ptr %122, align 1, !tbaa !9
  br label %1206, !llvm.loop !113

1235:                                             ; preds = %1231, %1209
  call void @llvm.lifetime.end.p0(i64 1, ptr %122) #9
  %1236 = load i32, ptr %12, align 4
  switch i32 %1236, label %1273 [
    i32 130, label %1237
  ]

1237:                                             ; preds = %1235
  br label %1271

1238:                                             ; preds = %145
  call void @llvm.lifetime.start.p0(i64 1, ptr %127) #9
  store i8 1, ptr %127, align 1, !tbaa !9
  br label %1239

1239:                                             ; preds = %1267, %1238
  %1240 = load i8, ptr %127, align 1, !tbaa !9, !range !11, !noundef !12
  %1241 = trunc i8 %1240 to i1
  br i1 %1241, label %1243, label %1242

1242:                                             ; preds = %1239
  store i32 136, ptr %12, align 4
  br label %1268

1243:                                             ; preds = %1239
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #9
  %1244 = load ptr, ptr %13, align 8, !tbaa !5
  %1245 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %1244)
  store ptr %1245, ptr %128, align 8, !tbaa !5
  br label %1246

1246:                                             ; preds = %1263, %1243
  %1247 = load ptr, ptr %128, align 8, !tbaa !5
  %1248 = load i8, ptr %127, align 1, !tbaa !9, !range !11, !noundef !12
  %1249 = trunc i8 %1248 to i1
  br i1 %1249, label %1251, label %1250

1250:                                             ; preds = %1246
  store i32 139, ptr %12, align 4
  br label %1264

1251:                                             ; preds = %1246
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1252 = load ptr, ptr %128, align 8, !tbaa !5
  %1253 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %1252, i32 0, i32 0
  %1254 = load ptr, ptr %1253, align 8, !tbaa !114
  %1255 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %129, i32 0, i32 0
  store ptr %1254, ptr %1255, align 8, !tbaa !114
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %131, ptr align 8 %129, i64 8, i1 false), !tbaa.struct !111
  %1256 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %131, i32 0, i32 0
  %1257 = load ptr, ptr %1256, align 8
  call void @_ZN3HIR8TypeDataC2ENS0_14Data_GeneratorE(ptr noundef nonnull align 8 dereferenceable(184) %130, ptr %1257)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %130)
          to label %1258 unwind label %1259

1258:                                             ; preds = %1251
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %130) #9
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  br label %1264

1259:                                             ; preds = %1251
  %1260 = landingpad { ptr, i32 }
          cleanup
  %1261 = extractvalue { ptr, i32 } %1260, 0
  store ptr %1261, ptr %19, align 8
  %1262 = extractvalue { ptr, i32 } %1260, 1
  store i32 %1262, ptr %20, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %130) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %127) #9
  br label %1275

1263:                                             ; No predecessors!
  store i8 0, ptr %127, align 1, !tbaa !9
  br label %1246, !llvm.loop !116

1264:                                             ; preds = %1258, %1250
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  %1265 = load i32, ptr %12, align 4
  switch i32 %1265, label %1268 [
    i32 139, label %1266
  ]

1266:                                             ; preds = %1264
  br label %1267

1267:                                             ; preds = %1266
  store i8 0, ptr %127, align 1, !tbaa !9
  br label %1239, !llvm.loop !117

1268:                                             ; preds = %1264, %1242
  call void @llvm.lifetime.end.p0(i64 1, ptr %127) #9
  %1269 = load i32, ptr %12, align 4
  switch i32 %1269, label %1273 [
    i32 136, label %1270
  ]

1270:                                             ; preds = %1268
  br label %1271

1271:                                             ; preds = %1270, %1237, %1204, %1085, %1037, %999, %950, %889, %854, %802, %505, %358, %331, %251, %227, %199, %145
  br label %1272

1272:                                             ; preds = %1271
  store i8 0, ptr %11, align 1, !tbaa !9
  br label %141, !llvm.loop !118

1273:                                             ; preds = %1268, %1235, %1202, %1083, %1035, %997, %948, %887, %852, %800, %503, %356, %329, %249, %225, %197, %144
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  %1274 = load i32, ptr %12, align 4
  switch i32 %1274, label %1278 [
    i32 5, label %1276
  ]

1275:                                             ; preds = %1259, %1226, %1196, %1080, %1026, %988, %942, %878, %849, %794, %497, %326, %216, %194
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #9
  br label %1283

1276:                                             ; preds = %1273
  br label %1277

1277:                                             ; preds = %1276
  store i8 0, ptr %11, align 1, !tbaa !9
  br label %134, !llvm.loop !119

1278:                                             ; preds = %1273, %137
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #9
  %1279 = load i32, ptr %12, align 4
  switch i32 %1279, label %1288 [
    i32 2, label %1280
    i32 1, label %1282
  ]

1280:                                             ; preds = %1278
  %1281 = call ptr @__cxa_allocate_exception(i64 8) #9
  store ptr @.str.3, ptr %1281, align 16, !tbaa !5
  call void @__cxa_throw(ptr %1281, ptr @_ZTIPKc, ptr null) #11
  unreachable

1282:                                             ; preds = %1278
  ret void

1283:                                             ; preds = %1275
  %1284 = load ptr, ptr %19, align 8
  %1285 = load i32, ptr %20, align 4
  %1286 = insertvalue { ptr, i32 } poison, ptr %1284, 0
  %1287 = insertvalue { ptr, i32 } %1286, i32 %1285, 1
  resume { ptr, i32 } %1287

1288:                                             ; preds = %1278
  unreachable
}

; 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 i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184)) #3 align 2

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

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

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 @"_ZNSt8functionIFvRSoEEC2IZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEbE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeDataC2ENS0_10Data_InferE(ptr noundef nonnull align 8 dereferenceable(184), i64) unnamed_addr #1 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK13Monomorphiser14monomorph_pathERK4SpanRKN3HIR4PathEb(ptr dead_on_unwind noalias writable sret(%"class.HIR::Path") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), i1 noundef zeroext) #1 align 2

declare void @_ZNK3HIR15TypePathBinding5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypePathBinding") align 8, ptr noundef nonnull align 8 dereferenceable(16)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEC2IS3_vEEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 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: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeDataC2ENS_13TypeData_PathE(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef) unnamed_addr #1 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 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: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184)) #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15make_unique_ptrIN3HIR13GenericParamsEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8, ptr noundef nonnull align 8 dereferenceable(96)) #1

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

declare void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8, ptr noundef nonnull align 8 dereferenceable(96)) #5

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK13Monomorphiser19monomorph_traitpathERK4SpanRKN3HIR9TraitPathEbb(ptr dead_on_unwind noalias writable sret(%"class.HIR::TraitPath") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(144), i1 noundef zeroext, i1 noundef zeroext) #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK13Monomorphiser21monomorph_path_paramsERK4SpanRKN3HIR10PathParamsEb(ptr dead_on_unwind noalias writable sret(%"struct.HIR::PathParams") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK13Monomorphiser19monomorph_arraysizeERK4SpanRKN3HIR9ArraySizeE(ptr dead_on_unwind noalias writable sret(%"class.HIR::ArraySize") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK3HIR25TypeData_NamedFunction_Ty5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8, ptr noundef nonnull align 8 dereferenceable(24)) #5

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #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: readwrite) }
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 = !{i64 0, i64 4, !14, i64 4, i64 4, !16}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"_ZTSN3HIR10InferClassE", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = !{!24, !24, i64 0}
!24 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = !{!30, !30, i64 0}
!30 = !{!"vtable pointer", !8, i64 0}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = !{i64 0, i64 4, !14}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19}
!36 = !{!37, !15, i64 88}
!37 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner8Data_FcnE", !38, i64 0, !15, i64 88}
!38 = !{!"_ZTSN3HIR4PathE", !39, i64 0}
!39 = !{!"_ZTSN3HIR4Path4DataE", !40, i64 0, !7, i64 8}
!40 = !{!"_ZTSN3HIR4Path4Data3TagE", !7, i64 0}
!41 = distinct !{!41, !19}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}
!45 = distinct !{!45, !19}
!46 = distinct !{!46, !19}
!47 = distinct !{!47, !19}
!48 = distinct !{!48, !19}
!49 = !{!50, !10, i64 0}
!50 = !{!"_ZTSN3HIR19TypeData_ErasedTypeE", !10, i64 0, !51, i64 8, !55, i64 32, !59, i64 56}
!51 = !{!"_ZTSSt6vectorIN3HIR9TraitPathESaIS1_EE", !52, i64 0}
!52 = !{!"_ZTSSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE12_Vector_implE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!55 = !{!"_ZTSSt6vectorIN3HIR11LifetimeRefESaIS1_EE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!59 = !{!"_ZTSN3HIR25TypeData_ErasedType_InnerE", !60, i64 0, !7, i64 8}
!60 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner3TagE", !7, i64 0}
!61 = distinct !{!61, !19}
!62 = distinct !{!62, !19}
!63 = distinct !{!63, !19}
!64 = distinct !{!64, !19}
!65 = distinct !{!65, !19}
!66 = distinct !{!66, !19}
!67 = distinct !{!67, !19}
!68 = distinct !{!68, !19}
!69 = !{!70, !72, i64 4}
!70 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !71, i64 0, !72, i64 4, !73, i64 8}
!71 = !{!"_ZTSN3HIR11LifetimeRefE", !15, i64 0}
!72 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!73 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!74 = distinct !{!74, !19}
!75 = distinct !{!75, !19}
!76 = !{!77, !72, i64 0}
!77 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !72, i64 0, !73, i64 8}
!78 = distinct !{!78, !19}
!79 = distinct !{!79, !19}
!80 = distinct !{!80, !19}
!81 = distinct !{!81, !19}
!82 = !{!83, !10, i64 96}
!83 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !84, i64 0, !10, i64 96, !10, i64 97, !101, i64 104, !73, i64 112, !102, i64 120}
!84 = !{!"_ZTSN3HIR13GenericParamsE", !85, i64 0, !89, i64 24, !93, i64 48, !97, i64 72}
!85 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !86, i64 0}
!86 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !87, i64 0}
!87 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !88, i64 0}
!88 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!89 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !90, i64 0}
!90 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !91, i64 0}
!91 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !92, i64 0}
!92 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!93 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !94, i64 0}
!94 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !95, i64 0}
!95 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !96, i64 0}
!96 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!97 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !98, i64 0}
!98 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !99, i64 0}
!99 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !100, i64 0}
!100 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!101 = !{!"_ZTS8RcString", !6, i64 0}
!102 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !103, i64 0}
!103 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !104, i64 0}
!104 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !105, i64 0}
!105 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!106 = !{!83, !10, i64 97}
!107 = distinct !{!107, !19}
!108 = distinct !{!108, !19}
!109 = !{!110, !6, i64 0}
!110 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !6, i64 0}
!111 = !{i64 0, i64 8, !5}
!112 = distinct !{!112, !19}
!113 = distinct !{!113, !19}
!114 = !{!115, !6, i64 0}
!115 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !6, i64 0}
!116 = distinct !{!116, !19}
!117 = distinct !{!117, !19}
!118 = distinct !{!118, !19}
!119 = distinct !{!119, !19}


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

%"class.HIR::TypeRef" = type { ptr }
%struct.Span = type { ptr }
%"class.std::function.60" = 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.HIR::TypeData" = type { i32, %"union.HIR::TypeData::DataUnion" }
%"union.HIR::TypeData::DataUnion" = type { %"struct.HIR::TypeData_ErasedType", [16 x i8] }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.17", %"class.std::vector.22", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.17" = type { %"struct.std::_Vector_base.18" }
%"struct.std::_Vector_base.18" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.22" = type { %"struct.std::_Vector_base.23" }
%"struct.std::_Vector_base.23" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"struct.HIR::PathParams" = type { %class.ThinVector.2, %class.ThinVector.3, %class.ThinVector.4 }
%class.ThinVector.2 = type { ptr }
%class.ThinVector.3 = type { ptr }
%class.ThinVector.4 = type { ptr }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"struct.HIR::TypeData_TraitObject" = type <{ %"class.HIR::TraitPath", %"class.std::vector", %"struct.HIR::LifetimeRef", [4 x i8] }>
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr", %"class.HIR::GenericPath", %"class.std::map", %"class.std::map.5", ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.5" = type { %"class.std::_Rb_tree.6" }
%"class.std::_Rb_tree.6" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.HIR::GenericParams" = type { %"class.std::vector.40", %"class.std::vector.45", %"class.std::vector.50", %"class.std::vector.55" }
%"class.std::vector.40" = type { %"struct.std::_Vector_base.41" }
%"struct.std::_Vector_base.41" = 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.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = 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.50" = type { %"struct.std::_Vector_base.51" }
%"struct.std::_Vector_base.51" = 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.55" = type { %"struct.std::_Vector_base.56" }
%"struct.std::_Vector_base.56" = 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.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.68" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.69" = type { ptr }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn" = type <{ %"class.HIR::Path", i32, [4 x i8] }>
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"class.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr.27", [8 x i8] }
%"class.std::unique_ptr.27" = type { %"struct.std::__uniq_ptr_data.28" }
%"struct.std::__uniq_ptr_data.28" = type { %"class.std::__uniq_ptr_impl.29" }
%"class.std::__uniq_ptr_impl.29" = type { %"class.std::tuple.30" }
%"class.std::tuple.30" = type { %"struct.std::_Tuple_impl.31" }
%"struct.std::_Tuple_impl.31" = type { %"struct.std::_Head_base.34" }
%"struct.std::_Head_base.34" = type { ptr }
%"class.std::vector.35" = type { %"struct.std::_Vector_base.36" }
%"struct.std::_Vector_base.36" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.70" = type { ptr }
%"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::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.35" }

@.str = external hidden unnamed_addr constant [39 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [80 x i8], align 1
@__PRETTY_FUNCTION__._ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb = external hidden unnamed_addr constant [103 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.3 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3, i1 noundef zeroext %4) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
.split607:
  %5 = alloca %struct.Span, align 8
  %6 = alloca %"class.std::function.60", align 8
  %7 = alloca %class.anon, align 8
  %8 = alloca %"class.HIR::TypeData", align 8
  %9 = alloca %"class.HIR::TypeData", align 8
  %10 = alloca %"class.HIR::TypeData", align 8
  %11 = alloca %"struct.HIR::TypeData_Path", align 8
  %12 = alloca %"class.HIR::TypePathBinding", align 8
  %13 = alloca %"struct.HIR::TypeData_TraitObject", align 8
  %14 = alloca %"class.std::unique_ptr", align 8
  %15 = alloca %"class.HIR::GenericParams", align 8
  %16 = alloca ptr, align 8
  %17 = alloca %"class.HIR::TraitPath", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %"class.HIR::GenericPath", align 8
  %21 = alloca %"class.HIR::TypeData", align 8
  %22 = alloca %"struct.HIR::TypeData_TraitObject", align 8
  %23 = alloca %"class.std::vector.17", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator.68", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator.68", align 8
  %26 = alloca %"class.HIR::TraitPath", align 8
  %27 = alloca %"class.std::vector.22", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.69", align 8
  %30 = alloca %"struct.HIR::LifetimeRef", align 4
  %31 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %32 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %33 = alloca %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", align 8
  %34 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %35 = alloca %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", align 8
  %36 = alloca %"class.HIR::TypeData_ErasedType_Inner", align 8
  %37 = alloca %"class.HIR::TypeRef", align 8
  %38 = alloca %"class.HIR::TypeData", align 8
  %39 = alloca %"struct.HIR::TypeData_ErasedType", align 8
  %40 = alloca %"class.HIR::TypeData", align 8
  %41 = alloca %"struct.HIR::TypeData::Data_Array", align 8
  %42 = alloca %"class.HIR::TypeRef", align 8
  %43 = alloca %"class.std::vector.35", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator.70", align 8
  %45 = alloca %"class.__gnu_cxx::__normal_iterator.70", align 8
  %46 = alloca %"class.HIR::TypeRef", align 8
  %47 = alloca %"class.std::vector.35", align 8
  %48 = alloca %"class.HIR::TypeRef", align 8
  %49 = alloca %"class.HIR::TypeRef", align 8
  %50 = alloca %"class.HIR::TypeData", align 8
  %51 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %52 = alloca ptr, align 8
  %53 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %54 = alloca %"class.HIR::GenericParams", align 8
  %55 = alloca %"class.HIR::TypeRef", align 8
  %56 = alloca %"class.__gnu_cxx::__normal_iterator.70", align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.70", align 8
  %58 = alloca %"class.HIR::TypeRef", align 8
  %59 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %60 = alloca %"class.HIR::TypeData", align 8
  %61 = alloca %"class.HIR::TypeData", align 8
  %62 = getelementptr inbounds i8, ptr %1, i64 72
  %63 = getelementptr inbounds i8, ptr %53, i64 96
  %64 = getelementptr inbounds i8, ptr %53, i64 97
  %65 = getelementptr inbounds i8, ptr %53, i64 104
  %66 = getelementptr inbounds i8, ptr %53, i64 112
  %67 = getelementptr inbounds i8, ptr %53, i64 120
  %68 = getelementptr inbounds i8, ptr %35, i64 24
  %69 = getelementptr inbounds i8, ptr %33, i64 88
  %70 = getelementptr inbounds i8, ptr %39, i64 8
  %71 = getelementptr inbounds i8, ptr %39, i64 32
  %72 = getelementptr inbounds i8, ptr %39, i64 56
  %73 = getelementptr inbounds i8, ptr %13, i64 144
  %74 = getelementptr inbounds i8, ptr %13, i64 168
  %75 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %76 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  switch i32 %76, label %.critedge.backedge [
    i32 0, label %77
    i32 1, label %78
    i32 2, label %92
    i32 3, label %97
    i32 4, label %100
    i32 5, label %129
    i32 6, label %134
    i32 7, label %199
    i32 8, label %284
    i32 9, label %301
    i32 10, label %309
    i32 11, label %331
    i32 12, label %347
    i32 13, label %357
    i32 14, label %371
    i32 15, label %415
    i32 16, label %421
  ], !llvm.loop !5

77:                                               ; preds = %.split607
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 308, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb) #8
  unreachable

78:                                               ; preds = %.split607
  %79 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  br i1 %4, label %88, label %80

80:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #9
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #9
  store ptr %3, ptr %7, align 8, !tbaa !7
  call void @"_ZNSt8functionIFvRSoEEC2IZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEbE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull %6)
          to label %81 unwind label %84

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

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

84:                                               ; preds = %80
  %85 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  br label %428

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

88:                                               ; preds = %78
  %.sroa.0155.0.copyload = load i64, ptr %79, align 4
  call void @_ZN3HIR8TypeDataC2ENS0_10Data_InferE(ptr noundef nonnull align 8 dereferenceable(184) %8, i64 %.sroa.0155.0.copyload)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %8)
          to label %89 unwind label %90

89:                                               ; preds = %88
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %8) #9
  br label %.thread396

90:                                               ; preds = %88
  %91 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %8) #9
  br label %428

92:                                               ; preds = %.split607
  %93 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  call void @_ZN3HIR8TypeDataC2ENS0_12Data_DivergeE(ptr noundef nonnull align 8 dereferenceable(184) %9)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %9)
          to label %94 unwind label %95

94:                                               ; preds = %92
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %9) #9
  br label %.thread396

95:                                               ; preds = %92
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %9) #9
  br label %428

97:                                               ; preds = %.split607
  %98 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  %99 = load i32, ptr %98, align 4, !tbaa !11
  tail call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %99)
  br label %.thread396

100:                                              ; preds = %.split607
  %101 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  call void @_ZNK13Monomorphiser14monomorph_pathERK4SpanRKN3HIR4PathEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %11, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(88) %101, i1 noundef zeroext %4)
  %102 = getelementptr inbounds i8, ptr %11, i64 88
  %103 = getelementptr inbounds i8, ptr %101, i64 88
  invoke void @_ZNK3HIR15TypePathBinding5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypePathBinding") align 8 %102, ptr noundef nonnull align 8 dereferenceable(16) %103)
          to label %104 unwind label %117

104:                                              ; preds = %100
  %105 = getelementptr inbounds i8, ptr %11, i64 104
  call void @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEC2IS3_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %105) #9
  invoke void @_ZN3HIR8TypeDataC2ENS_13TypeData_PathE(ptr noundef nonnull align 8 dereferenceable(184) %10, ptr noundef nonnull %11)
          to label %106 unwind label %119

106:                                              ; preds = %104
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %10)
          to label %107 unwind label %121

107:                                              ; preds = %106
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %10) #9
  call void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %11) #9
  %108 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding9is_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16) %103)
  br i1 %108, label %109, label %.thread396

109:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #9
  invoke void @_ZN3HIR15TypePathBindingC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %110 unwind label %124

110:                                              ; preds = %109
  %111 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZN3HIR7TypeRef10get_uniqueEv(ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %112 unwind label %126

112:                                              ; preds = %110
  %113 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %111)
  %114 = getelementptr inbounds i8, ptr %113, i64 88
  %115 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR15TypePathBindingaSEOS0_(ptr noundef nonnull align 8 dereferenceable(16) %114, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %116 unwind label %126

116:                                              ; preds = %112
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  br label %.thread396

117:                                              ; preds = %100
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %11) #9
  br label %428

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

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

123:                                              ; preds = %121, %119
  %.pn382 = phi { ptr, i32 } [ %122, %121 ], [ %120, %119 ]
  call void @_ZN3HIR13TypeData_PathD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %11) #9
  br label %428

124:                                              ; preds = %109
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %128

126:                                              ; preds = %112, %110
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #9
  br label %128

128:                                              ; preds = %126, %124
  %.pn384 = phi { ptr, i32 } [ %127, %126 ], [ %125, %124 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #9
  br label %428

129:                                              ; preds = %.split607
  %130 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  %131 = load ptr, ptr %1, align 8, !tbaa !13
  %132 = getelementptr inbounds i8, ptr %131, i64 16
  %133 = load ptr, ptr %132, align 8
  tail call void %133(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(12) %130)
  br label %.thread396

134:                                              ; preds = %.split607
  %135 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %13) #9
  call void @_ZN3HIR20TypeData_TraitObjectC2Ev(ptr noundef nonnull align 8 dereferenceable(172) %13)
  %136 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %135) #9
  br i1 %136, label %137, label %151

137:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %15) #9
  %138 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %135) #9
  invoke void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::GenericParams") align 8 %15, ptr noundef nonnull align 8 dereferenceable(96) %138)
          to label %139 unwind label %144

139:                                              ; preds = %137
  invoke void @_Z15make_unique_ptrIN3HIR13GenericParamsEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %14, ptr noundef nonnull align 8 dereferenceable(96) %15)
          to label %140 unwind label %146

140:                                              ; preds = %139
  %141 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  call void @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %15) #9
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #9
  %142 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %135) #9
  store ptr %142, ptr %16, align 8, !tbaa !7
  invoke void @_ZNSt6vectorIPKN3HIR13GenericParamsESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %143 unwind label %149

143:                                              ; preds = %140
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  br label %151

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

146:                                              ; preds = %139
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %15) #9
  br label %148

148:                                              ; preds = %146, %144
  %.pn373 = phi { ptr, i32 } [ %147, %146 ], [ %145, %144 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  br label %198

149:                                              ; preds = %140
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  br label %198

151:                                              ; preds = %143, %134
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %17) #9
  invoke void @_ZNK13Monomorphiser19monomorph_traitpathERK4SpanRKN3HIR9TraitPathEbb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TraitPath") align 8 %17, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(144) %135, i1 noundef zeroext %4, i1 noundef zeroext false)
          to label %152 unwind label %160

152:                                              ; preds = %151
  %153 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR9TraitPathaSEOS0_(ptr noundef nonnull align 8 dereferenceable(144) %13, ptr noundef nonnull align 8 dereferenceable(144) %17)
          to label %154 unwind label %162

154:                                              ; preds = %152
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %17) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %17) #9
  %155 = getelementptr inbounds i8, ptr %135, i64 144
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #9
  %156 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %155) #9
  store ptr %156, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #9
  %157 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %155) #9
  store ptr %157, ptr %19, align 8
  %158 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  br i1 %158, label %.lr.ph605, label %._crit_edge606

._crit_edge606:                                   ; preds = %170, %154
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  %159 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %135) #9
  br i1 %159, label %178, label %179

160:                                              ; preds = %151
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %164

162:                                              ; preds = %152
  %163 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %17) #9
  br label %164

164:                                              ; preds = %162, %160
  %.pn375 = phi { ptr, i32 } [ %163, %162 ], [ %161, %160 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %17) #9
  br label %198

.lr.ph605:                                        ; preds = %154, %170
  %165 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #9
  %166 = load ptr, ptr %1, align 8, !tbaa !13
  %167 = getelementptr inbounds i8, ptr %166, i64 56
  %168 = load ptr, ptr %167, align 8
  invoke void %168(ptr dead_on_unwind nonnull writable sret(%"class.HIR::GenericPath") align 8 %20, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(32) %165, i1 noundef zeroext %4, i1 noundef zeroext false)
          to label %169 unwind label %173

169:                                              ; preds = %.lr.ph605
  invoke void @_ZNSt6vectorIN3HIR11GenericPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %73, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %170 unwind label %175

170:                                              ; preds = %169
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #9
  %171 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  %172 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  br i1 %172, label %.lr.ph605, label %._crit_edge606

173:                                              ; preds = %.lr.ph605
  %174 = landingpad { ptr, i32 }
          cleanup
  br label %177

175:                                              ; preds = %169
  %176 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  br label %177

177:                                              ; preds = %175, %173
  %.pn379 = phi { ptr, i32 } [ %176, %175 ], [ %174, %173 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  br label %198

178:                                              ; preds = %._crit_edge606
  call void @_ZNSt6vectorIPKN3HIR13GenericParamsESaIS3_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  br label %179

179:                                              ; preds = %178, %._crit_edge606
  %180 = getelementptr inbounds i8, ptr %135, i64 168
  %181 = load ptr, ptr %1, align 8, !tbaa !13
  %182 = getelementptr inbounds i8, ptr %181, i64 48
  %183 = load ptr, ptr %182, align 8
  %184 = invoke i32 %183(ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 4 dereferenceable(4) %180)
          to label %185 unwind label %189

185:                                              ; preds = %179
  store i32 %184, ptr %74, align 8, !tbaa !15
  invoke void @_ZN3HIR20TypeData_TraitObjectC2EOS0_(ptr noundef nonnull align 8 dereferenceable(172) %22, ptr noundef nonnull align 8 dereferenceable(172) %13)
          to label %186 unwind label %191

186:                                              ; preds = %185
  invoke void @_ZN3HIR8TypeDataC2ENS_20TypeData_TraitObjectE(ptr noundef nonnull align 8 dereferenceable(184) %21, ptr noundef nonnull %22)
          to label %187 unwind label %193

187:                                              ; preds = %186
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %21)
          to label %188 unwind label %195

188:                                              ; preds = %187
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %21) #9
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %22) #9
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %13) #9
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %13) #9
  br label %.thread396

189:                                              ; preds = %179
  %190 = landingpad { ptr, i32 }
          cleanup
  br label %198

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

193:                                              ; preds = %186
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %197

195:                                              ; preds = %187
  %196 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %21) #9
  br label %197

197:                                              ; preds = %195, %193
  %.pn377 = phi { ptr, i32 } [ %196, %195 ], [ %194, %193 ]
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %22) #9
  br label %198

198:                                              ; preds = %197, %191, %189, %177, %164, %149, %148
  %.pn379.pn = phi { ptr, i32 } [ %.pn379, %177 ], [ %.pn377, %197 ], [ %192, %191 ], [ %190, %189 ], [ %.pn375, %164 ], [ %150, %149 ], [ %.pn373, %148 ]
  call void @_ZN3HIR20TypeData_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %13) #9
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %13) #9
  br label %428

199:                                              ; preds = %.split607
  %200 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #9
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #9
  %201 = getelementptr inbounds i8, ptr %200, i64 8
  %202 = call noundef i64 @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %201) #9
  invoke void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %202)
          to label %203 unwind label %211

203:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #9
  %204 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %201) #9
  store ptr %204, ptr %24, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #9
  %205 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %201) #9
  store ptr %205, ptr %25, align 8
  %206 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  br i1 %206, label %.lr.ph480, label %._crit_edge481

._crit_edge481:                                   ; preds = %215, %203
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #9
  call void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #9
  %207 = getelementptr inbounds i8, ptr %200, i64 32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #9
  %208 = call ptr @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %207) #9
  store ptr %208, ptr %28, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #9
  %209 = call ptr @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %207) #9
  store ptr %209, ptr %29, align 8
  %210 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #9
  br i1 %210, label %.lr.ph483, label %._crit_edge484

211:                                              ; preds = %199
  %212 = landingpad { ptr, i32 }
          cleanup
  br label %283

.lr.ph480:                                        ; preds = %203, %215
  %213 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %26) #9
  invoke void @_ZNK13Monomorphiser19monomorph_traitpathERK4SpanRKN3HIR9TraitPathEbb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TraitPath") align 8 %26, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(144) %213, i1 noundef zeroext %4, i1 noundef zeroext false)
          to label %214 unwind label %218

214:                                              ; preds = %.lr.ph480
  invoke void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(144) %26)
          to label %215 unwind label %220

215:                                              ; preds = %214
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %26) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %26) #9
  %216 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  %217 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  br i1 %217, label %.lr.ph480, label %._crit_edge481

218:                                              ; preds = %.lr.ph480
  %219 = landingpad { ptr, i32 }
          cleanup
  br label %222

220:                                              ; preds = %214
  %221 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR9TraitPathD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %26) #9
  br label %222

222:                                              ; preds = %220, %218
  %.pn370 = phi { ptr, i32 } [ %221, %220 ], [ %219, %218 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #9
  br label %283

._crit_edge484:                                   ; preds = %229, %._crit_edge481
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #9
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %31) #9
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %31)
          to label %.lr.ph602 unwind label %235

.lr.ph483:                                        ; preds = %._crit_edge481, %229
  %223 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #9
  %224 = load ptr, ptr %1, align 8, !tbaa !13
  %225 = getelementptr inbounds i8, ptr %224, i64 48
  %226 = load ptr, ptr %225, align 8
  %227 = invoke i32 %226(ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 4 dereferenceable(4) %223)
          to label %228 unwind label %232

228:                                              ; preds = %.lr.ph483
  store i32 %227, ptr %30, align 4
  invoke void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %229 unwind label %232

229:                                              ; preds = %228
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #9
  %230 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #9
  %231 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #9
  br i1 %231, label %.lr.ph483, label %._crit_edge484

232:                                              ; preds = %228, %.lr.ph483
  %233 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #9
  br label %282

.loopexit407:                                     ; preds = %.lr.ph602, %..loopexit_crit_edge, %..loopexit400_crit_edge, %..loopexit401_crit_edge
  %234 = load i8, ptr %200, align 8, !tbaa !17, !range !30, !noundef !31
  store i8 %234, ptr %39, align 8, !tbaa !17
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %70, ptr noundef nonnull align 8 dereferenceable(24) %23) #9
  call void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %71, ptr noundef nonnull align 8 dereferenceable(24) %27) #9
  call void @_ZN3HIR25TypeData_ErasedType_InnerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(104) %72, ptr noundef nonnull align 8 dereferenceable(104) %31) #9
  invoke void @_ZN3HIR8TypeDataC2ENS_19TypeData_ErasedTypeE(ptr noundef nonnull align 8 dereferenceable(184) %38, ptr noundef nonnull %39)
          to label %273 unwind label %275

235:                                              ; preds = %._crit_edge484
  %236 = landingpad { ptr, i32 }
          cleanup
  br label %281

.lr.ph602:                                        ; preds = %._crit_edge484
  %237 = getelementptr inbounds i8, ptr %200, i64 56
  %238 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %237)
  switch i32 %238, label %.loopexit407 [
    i32 0, label %245
    i32 1, label %.preheader
    i32 3, label %.preheader403
    i32 2, label %.preheader405
  ]

.preheader405:                                    ; preds = %.lr.ph602
  %239 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %237)
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %36) #9
  %240 = load ptr, ptr %1, align 8, !tbaa !13
  %241 = getelementptr inbounds i8, ptr %240, i64 40
  %242 = load ptr, ptr %241, align 8
  invoke void %242(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %37, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %239, i1 noundef zeroext %4)
          to label %265 unwind label %.split.split

.preheader403:                                    ; preds = %.lr.ph602
  %243 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %237)
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %34) #9
  invoke void @_ZNK13Monomorphiser21monomorph_path_paramsERK4SpanRKN3HIR10PathParamsEb(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::PathParams") align 8 %35, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(24) %243, i1 noundef zeroext %4)
          to label %256 unwind label %.split514.split

.preheader:                                       ; preds = %.lr.ph602
  %244 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %237)
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %32) #9
  invoke void @_ZNK13Monomorphiser14monomorph_pathERK4SpanRKN3HIR4PathEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %33, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(88) %244, i1 noundef zeroext %4)
          to label %246 unwind label %.split558.split

245:                                              ; preds = %.lr.ph602
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 361, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb) #8
  unreachable

246:                                              ; preds = %.preheader
  %247 = getelementptr inbounds i8, ptr %244, i64 88
  %248 = load i32, ptr %247, align 8, !tbaa !32
  store i32 %248, ptr %69, align 8, !tbaa !32
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS0_8Data_FcnE(ptr noundef nonnull align 8 dereferenceable(104) %32, ptr noundef nonnull %33)
          to label %249 unwind label %.split561.split

249:                                              ; preds = %246
  %250 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %31, ptr noundef nonnull align 8 dereferenceable(104) %32)
          to label %..loopexit_crit_edge unwind label %.split564.split

..loopexit_crit_edge:                             ; preds = %249
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %32) #9
  call void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92) %33) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %32) #9
  br label %.loopexit407

.split558.split:                                  ; preds = %.preheader
  %251 = landingpad { ptr, i32 }
          cleanup
  br label %255

.split561.split:                                  ; preds = %246
  %252 = landingpad { ptr, i32 }
          cleanup
  br label %254

.split564.split:                                  ; preds = %249
  %253 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %32) #9
  br label %254

254:                                              ; preds = %.split564.split, %.split561.split
  %.pn362 = phi { ptr, i32 } [ %253, %.split564.split ], [ %252, %.split561.split ]
  call void @_ZN3HIR25TypeData_ErasedType_Inner8Data_FcnD2Ev(ptr noundef nonnull align 8 dereferenceable(92) %33) #9
  br label %255

255:                                              ; preds = %254, %.split558.split
  %.pn362.pn = phi { ptr, i32 } [ %.pn362, %254 ], [ %251, %.split558.split ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %32) #9
  br label %280

256:                                              ; preds = %.preheader403
  %257 = getelementptr inbounds i8, ptr %243, i64 24
  call void @_ZNSt10shared_ptrIN3HIR30TypeData_ErasedType_AliasInnerEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %68, ptr noundef nonnull align 8 dereferenceable(16) %257) #9
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS0_10Data_AliasE(ptr noundef nonnull align 8 dereferenceable(104) %34, ptr noundef nonnull %35)
          to label %258 unwind label %.split517.split

258:                                              ; preds = %256
  %259 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %31, ptr noundef nonnull align 8 dereferenceable(104) %34)
          to label %..loopexit400_crit_edge unwind label %.split520.split

..loopexit400_crit_edge:                          ; preds = %258
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %34) #9
  call void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %35) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %34) #9
  br label %.loopexit407

.split514.split:                                  ; preds = %.preheader403
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %264

.split517.split:                                  ; preds = %256
  %261 = landingpad { ptr, i32 }
          cleanup
  br label %263

.split520.split:                                  ; preds = %258
  %262 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %34) #9
  br label %263

263:                                              ; preds = %.split520.split, %.split517.split
  %.pn359 = phi { ptr, i32 } [ %262, %.split520.split ], [ %261, %.split517.split ]
  call void @_ZN3HIR25TypeData_ErasedType_Inner10Data_AliasD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %35) #9
  br label %264

264:                                              ; preds = %263, %.split514.split
  %.pn359.pn = phi { ptr, i32 } [ %.pn359, %263 ], [ %260, %.split514.split ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %34) #9
  br label %280

265:                                              ; preds = %.preheader405
  invoke void @_ZN3HIR25TypeData_ErasedType_InnerC2ENS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(104) %36, ptr noundef nonnull %37)
          to label %266 unwind label %.split488.split

266:                                              ; preds = %265
  %267 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR25TypeData_ErasedType_InneraSEOS0_(ptr noundef nonnull align 8 dereferenceable(104) %31, ptr noundef nonnull align 8 dereferenceable(104) %36)
          to label %..loopexit401_crit_edge unwind label %.split491.split

..loopexit401_crit_edge:                          ; preds = %266
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %36) #9
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %36) #9
  br label %.loopexit407

.split.split:                                     ; preds = %.preheader405
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %272

.split488.split:                                  ; preds = %265
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %271

.split491.split:                                  ; preds = %266
  %270 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %36) #9
  br label %271

271:                                              ; preds = %.split491.split, %.split488.split
  %.pn356 = phi { ptr, i32 } [ %270, %.split491.split ], [ %269, %.split488.split ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #9
  br label %272

272:                                              ; preds = %271, %.split.split
  %.pn356.pn = phi { ptr, i32 } [ %.pn356, %271 ], [ %268, %.split.split ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %36) #9
  br label %280

273:                                              ; preds = %.loopexit407
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %38)
          to label %274 unwind label %277

274:                                              ; preds = %273
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %38) #9
  call void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160) %39) #9
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %31) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %31) #9
  call void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #9
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #9
  br label %.thread396

275:                                              ; preds = %.loopexit407
  %276 = landingpad { ptr, i32 }
          cleanup
  br label %279

277:                                              ; preds = %273
  %278 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %38) #9
  br label %279

279:                                              ; preds = %277, %275
  %.pn354 = phi { ptr, i32 } [ %278, %277 ], [ %276, %275 ]
  call void @_ZN3HIR19TypeData_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(160) %39) #9
  br label %280

280:                                              ; preds = %255, %264, %272, %279
  %.pn356.pn.pn.pn = phi { ptr, i32 } [ %.pn354, %279 ], [ %.pn356.pn, %272 ], [ %.pn359.pn, %264 ], [ %.pn362.pn, %255 ]
  call void @_ZN3HIR25TypeData_ErasedType_InnerD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %31) #9
  br label %281

281:                                              ; preds = %280, %235
  %.pn356.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn356.pn.pn.pn, %280 ], [ %236, %235 ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %31) #9
  br label %282

282:                                              ; preds = %281, %232
  %.pn368 = phi { ptr, i32 } [ %233, %232 ], [ %.pn356.pn.pn.pn.pn, %281 ]
  call void @_ZNSt6vectorIN3HIR11LifetimeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #9
  br label %283

283:                                              ; preds = %282, %222, %211
  %.pn370.pn = phi { ptr, i32 } [ %.pn370, %222 ], [ %.pn368, %282 ], [ %212, %211 ]
  call void @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #9
  br label %428

284:                                              ; preds = %.split607
  %285 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  %286 = load ptr, ptr %1, align 8, !tbaa !13
  %287 = getelementptr inbounds i8, ptr %286, i64 40
  %288 = load ptr, ptr %287, align 8
  call void %288(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %41, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %285, i1 noundef zeroext %4)
  %289 = getelementptr inbounds i8, ptr %41, i64 8
  %290 = getelementptr inbounds i8, ptr %285, i64 8
  invoke void @_ZNK13Monomorphiser19monomorph_arraysizeERK4SpanRKN3HIR9ArraySizeE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::ArraySize") align 8 %289, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(32) %290)
          to label %291 unwind label %294

291:                                              ; preds = %284
  invoke void @_ZN3HIR8TypeData10make_ArrayENS0_10Data_ArrayE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %40, ptr noundef nonnull %41)
          to label %292 unwind label %296

292:                                              ; preds = %291
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %40)
          to label %293 unwind label %298

293:                                              ; preds = %292
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %40) #9
  call void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %41) #9
  br label %.thread396

294:                                              ; preds = %284
  %295 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #9
  br label %428

296:                                              ; preds = %291
  %297 = landingpad { ptr, i32 }
          cleanup
  br label %300

298:                                              ; preds = %292
  %299 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %40) #9
  br label %300

300:                                              ; preds = %298, %296
  %.pn351 = phi { ptr, i32 } [ %299, %298 ], [ %297, %296 ]
  call void @_ZN3HIR8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %41) #9
  br label %428

301:                                              ; preds = %.split607
  %302 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  %303 = load ptr, ptr %1, align 8, !tbaa !13
  %304 = getelementptr inbounds i8, ptr %303, i64 40
  %305 = load ptr, ptr %304, align 8
  call void %305(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %42, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %302, i1 noundef zeroext %4)
  invoke void @_ZN3HIR7TypeRef9new_sliceES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull %42)
          to label %306 unwind label %307

306:                                              ; preds = %301
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %42) #9
  br label %.thread396

307:                                              ; preds = %301
  %308 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %42) #9
  br label %428

309:                                              ; preds = %.split607
  %310 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %43) #9
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #9
  %311 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #9
  store ptr %311, ptr %44, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #9
  %312 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #9
  store ptr %312, ptr %45, align 8
  %313 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %45) #9
  br i1 %313, label %.lr.ph477, label %._crit_edge478

._crit_edge478:                                   ; preds = %319, %309
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #9
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(24) %43) #9
  invoke void @_ZN3HIR7TypeRefC2ESt6vectorIS0_SaIS0_EE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %47)
          to label %327 unwind label %328

.lr.ph477:                                        ; preds = %309, %319
  %314 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %44) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #9
  %315 = load ptr, ptr %1, align 8, !tbaa !13
  %316 = getelementptr inbounds i8, ptr %315, i64 40
  %317 = load ptr, ptr %316, align 8
  invoke void %317(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %46, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %314, i1 noundef zeroext %4)
          to label %318 unwind label %322

318:                                              ; preds = %.lr.ph477
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %43, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %319 unwind label %324

319:                                              ; preds = %318
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #9
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %44) #9
  %321 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %45) #9
  br i1 %321, label %.lr.ph477, label %._crit_edge478

322:                                              ; preds = %.lr.ph477
  %323 = landingpad { ptr, i32 }
          cleanup
  br label %326

324:                                              ; preds = %318
  %325 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #9
  br label %326

326:                                              ; preds = %324, %322
  %.pn348 = phi { ptr, i32 } [ %325, %324 ], [ %323, %322 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #9
  br label %330

327:                                              ; preds = %._crit_edge478
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %43) #9
  br label %.thread396

328:                                              ; preds = %._crit_edge478
  %329 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  br label %330

330:                                              ; preds = %328, %326
  %.pn348.pn = phi { ptr, i32 } [ %.pn348, %326 ], [ %329, %328 ]
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %43) #9
  br label %428

331:                                              ; preds = %.split607
  %332 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  %333 = getelementptr inbounds i8, ptr %332, i64 4
  %334 = load i32, ptr %333, align 4, !tbaa !37
  %335 = getelementptr inbounds i8, ptr %332, i64 8
  %336 = load ptr, ptr %1, align 8, !tbaa !13
  %337 = getelementptr inbounds i8, ptr %336, i64 40
  %338 = load ptr, ptr %337, align 8
  call void %338(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %48, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %335, i1 noundef zeroext %4)
  %339 = load ptr, ptr %1, align 8, !tbaa !13
  %340 = getelementptr inbounds i8, ptr %339, i64 48
  %341 = load ptr, ptr %340, align 8
  %342 = invoke i32 %341(ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 4 dereferenceable(4) %332)
          to label %343 unwind label %345

343:                                              ; preds = %331
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_NS_11LifetimeRefE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef %334, ptr noundef nonnull %48, i32 %342)
          to label %344 unwind label %345

344:                                              ; preds = %343
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %48) #9
  br label %.thread396

345:                                              ; preds = %343, %331
  %346 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %48) #9
  br label %428

347:                                              ; preds = %.split607
  %348 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  %349 = load i32, ptr %348, align 8, !tbaa !42
  %350 = getelementptr inbounds i8, ptr %348, i64 8
  %351 = load ptr, ptr %1, align 8, !tbaa !13
  %352 = getelementptr inbounds i8, ptr %351, i64 40
  %353 = load ptr, ptr %352, align 8
  call void %353(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %49, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %350, i1 noundef zeroext %4)
  invoke void @_ZN3HIR7TypeRef11new_pointerENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef %349, ptr noundef nonnull %49)
          to label %354 unwind label %355

354:                                              ; preds = %347
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %49) #9
  br label %.thread396

355:                                              ; preds = %347
  %356 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %49) #9
  br label %428

357:                                              ; preds = %.split607
  %358 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  call void @_ZNK13Monomorphiser14monomorph_pathERK4SpanRKN3HIR4PathEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %51, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(88) %358, i1 noundef zeroext %4)
  %359 = getelementptr inbounds i8, ptr %51, i64 88
  %360 = getelementptr inbounds i8, ptr %358, i64 88
  invoke void @_ZNK3HIR25TypeData_NamedFunction_Ty5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8 %359, ptr noundef nonnull align 8 dereferenceable(24) %360)
          to label %361 unwind label %364

361:                                              ; preds = %357
  invoke void @_ZN3HIR8TypeDataC2ENS0_18Data_NamedFunctionE(ptr noundef nonnull align 8 dereferenceable(184) %50, ptr noundef nonnull %51)
          to label %362 unwind label %366

362:                                              ; preds = %361
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %50)
          to label %363 unwind label %368

363:                                              ; preds = %362
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %50) #9
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %51) #9
  br label %.thread396

364:                                              ; preds = %357
  %365 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %51) #9
  br label %428

366:                                              ; preds = %361
  %367 = landingpad { ptr, i32 }
          cleanup
  br label %370

368:                                              ; preds = %362
  %369 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %50) #9
  br label %370

370:                                              ; preds = %368, %366
  %.pn345 = phi { ptr, i32 } [ %369, %368 ], [ %367, %366 ]
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %51) #9
  br label %428

371:                                              ; preds = %.split607
  %372 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #9
  store ptr %372, ptr %52, align 8, !tbaa !7
  call void @_ZNSt6vectorIPKN3HIR13GenericParamsESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 8 dereferenceable(8) %52)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #9
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %53) #9
  call void @_ZN3HIR24TypeData_FunctionPointerC2Ev(ptr noundef nonnull align 8 dereferenceable(144) %53)
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %54) #9
  invoke void @_ZNK3HIR13GenericParams5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::GenericParams") align 8 %54, ptr noundef nonnull align 8 dereferenceable(96) %372)
          to label %373 unwind label %391

373:                                              ; preds = %371
  %374 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZN3HIR13GenericParamsaSEOS0_(ptr noundef nonnull align 8 dereferenceable(96) %53, ptr noundef nonnull align 8 dereferenceable(96) %54) #9
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %54) #9
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %54) #9
  %375 = getelementptr inbounds i8, ptr %372, i64 96
  %376 = load i8, ptr %375, align 8, !tbaa !44, !range !30, !noundef !31
  store i8 %376, ptr %63, align 8, !tbaa !44
  %377 = getelementptr inbounds i8, ptr %372, i64 97
  %378 = load i8, ptr %377, align 1, !tbaa !68, !range !30, !noundef !31
  store i8 %378, ptr %64, align 1, !tbaa !68
  %379 = getelementptr inbounds i8, ptr %372, i64 104
  %380 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN8RcStringaSERKS_(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 8 dereferenceable(8) %379)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #9
  %381 = getelementptr inbounds i8, ptr %372, i64 112
  %382 = load ptr, ptr %1, align 8, !tbaa !13
  %383 = getelementptr inbounds i8, ptr %382, i64 40
  %384 = load ptr, ptr %383, align 8
  invoke void %384(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %55, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %381, i1 noundef zeroext %4)
          to label %385 unwind label %395

385:                                              ; preds = %373
  %386 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %66, ptr noundef nonnull align 8 dereferenceable(8) %55)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #9
  %387 = getelementptr inbounds i8, ptr %372, i64 120
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #9
  %388 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %387) #9
  store ptr %388, ptr %56, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #9
  %389 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %387) #9
  store ptr %389, ptr %57, align 8
  %390 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %57) #9
  br i1 %390, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %402, %385
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #9
  call void @_ZNSt6vectorIPKN3HIR13GenericParamsESaIS3_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  invoke void @_ZN3HIR24TypeData_FunctionPointerC2EOS0_(ptr noundef nonnull align 8 dereferenceable(144) %59, ptr noundef nonnull align 8 dereferenceable(144) %53)
          to label %410 unwind label %393

391:                                              ; preds = %371
  %392 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %54) #9
  br label %414

393:                                              ; preds = %._crit_edge
  %394 = landingpad { ptr, i32 }
          cleanup
  br label %414

395:                                              ; preds = %373
  %396 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #9
  br label %414

.lr.ph:                                           ; preds = %385, %402
  %397 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #9
  %398 = load ptr, ptr %1, align 8, !tbaa !13
  %399 = getelementptr inbounds i8, ptr %398, i64 40
  %400 = load ptr, ptr %399, align 8
  invoke void %400(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %58, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %397, i1 noundef zeroext %4)
          to label %401 unwind label %405

401:                                              ; preds = %.lr.ph
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %67, ptr noundef nonnull align 8 dereferenceable(8) %58)
          to label %402 unwind label %407

402:                                              ; preds = %401
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #9
  %403 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  %404 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %57) #9
  br i1 %404, label %.lr.ph, label %._crit_edge

405:                                              ; preds = %.lr.ph
  %406 = landingpad { ptr, i32 }
          cleanup
  br label %409

407:                                              ; preds = %401
  %408 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #9
  br label %409

409:                                              ; preds = %407, %405
  %.pn = phi { ptr, i32 } [ %408, %407 ], [ %406, %405 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #9
  br label %414

410:                                              ; preds = %._crit_edge
  invoke void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %59)
          to label %411 unwind label %412

411:                                              ; preds = %410
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %59) #9
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %53) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %53) #9
  br label %.thread396

412:                                              ; preds = %410
  %413 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %59) #9
  br label %414

414:                                              ; preds = %412, %409, %395, %393, %391
  %.pn.pn = phi { ptr, i32 } [ %.pn, %409 ], [ %413, %412 ], [ %394, %393 ], [ %396, %395 ], [ %392, %391 ]
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %53) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %53) #9
  br label %428

415:                                              ; preds = %.split607
  %416 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  %417 = load ptr, ptr %416, align 8, !tbaa !69
  call void @_ZN3HIR8TypeDataC2ENS0_12Data_ClosureE(ptr noundef nonnull align 8 dereferenceable(184) %60, ptr %417)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %60)
          to label %418 unwind label %419

418:                                              ; preds = %415
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %60) #9
  br label %.thread396

419:                                              ; preds = %415
  %420 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %60) #9
  br label %428

421:                                              ; preds = %.split607
  %422 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %75)
  %423 = load ptr, ptr %422, align 8, !tbaa !71
  call void @_ZN3HIR8TypeDataC2ENS0_14Data_GeneratorE(ptr noundef nonnull align 8 dereferenceable(184) %61, ptr %423)
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %61)
          to label %424 unwind label %425

424:                                              ; preds = %421
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %61) #9
  br label %.thread396

425:                                              ; preds = %421
  %426 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %61) #9
  br label %428

.critedge.backedge:                               ; preds = %.split607
  %427 = tail call ptr @__cxa_allocate_exception(i64 8) #9
  store ptr @.str.3, ptr %427, align 16, !tbaa !7
  tail call void @__cxa_throw(ptr nonnull %427, ptr nonnull @_ZTIPKc, ptr null) #10
  unreachable

428:                                              ; preds = %364, %370, %294, %300, %117, %123, %128, %84, %86, %90, %425, %419, %414, %355, %345, %330, %307, %283, %198, %95
  %.pn389 = phi { ptr, i32 } [ %426, %425 ], [ %420, %419 ], [ %.pn.pn, %414 ], [ %356, %355 ], [ %346, %345 ], [ %.pn348.pn, %330 ], [ %308, %307 ], [ %.pn370.pn, %283 ], [ %.pn379.pn, %198 ], [ %96, %95 ], [ %91, %90 ], [ %87, %86 ], [ %85, %84 ], [ %.pn384, %128 ], [ %.pn382, %123 ], [ %118, %117 ], [ %.pn351, %300 ], [ %295, %294 ], [ %.pn345, %370 ], [ %365, %364 ]
  resume { ptr, i32 } %.pn389

.thread396:                                       ; preds = %411, %327, %274, %188, %107, %116, %424, %418, %363, %354, %344, %306, %293, %129, %97, %94, %89
  ret void
}

; 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 i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #3 align 2

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

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

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 @"_ZNSt8functionIFvRSoEEC2IZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEbE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeDataC2ENS0_10Data_InferE(ptr noundef nonnull align 8 dereferenceable(184), i64) unnamed_addr #1 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK13Monomorphiser14monomorph_pathERK4SpanRKN3HIR4PathEb(ptr dead_on_unwind noalias writable sret(%"class.HIR::Path") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), i1 noundef zeroext) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EEC2IS3_vEEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 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: mustprogress uwtable
declare dso_local void @_ZN3HIR8TypeDataC2ENS_13TypeData_PathE(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef) unnamed_addr #1 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 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: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15make_unique_ptrIN3HIR13GenericParamsEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8, ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #1

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK13Monomorphiser19monomorph_traitpathERK4SpanRKN3HIR9TraitPathEbb(ptr dead_on_unwind noalias writable sret(%"class.HIR::TraitPath") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(144), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR9TraitPathaSEOS0_(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #7 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK13Monomorphiser21monomorph_path_paramsERK4SpanRKN3HIR10PathParamsEb(ptr dead_on_unwind noalias writable sret(%"struct.HIR::PathParams") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK13Monomorphiser19monomorph_arraysizeERK4SpanRKN3HIR9ArraySizeE(ptr dead_on_unwind noalias writable sret(%"class.HIR::ArraySize") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #7 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 noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #3 align 2

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !8, i64 0}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!12, !12, i64 0}
!12 = !{!"_ZTSN3HIR8CoreTypeE", !9, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"vtable pointer", !10, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !9, i64 0}
!17 = !{!18, !19, i64 0}
!18 = !{!"_ZTSN3HIR19TypeData_ErasedTypeE", !19, i64 0, !20, i64 8, !24, i64 32, !28, i64 56}
!19 = !{!"bool", !9, i64 0}
!20 = !{!"_ZTSSt6vectorIN3HIR9TraitPathESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!24 = !{!"_ZTSSt6vectorIN3HIR11LifetimeRefESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!28 = !{!"_ZTSN3HIR25TypeData_ErasedType_InnerE", !29, i64 0, !9, i64 8}
!29 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner3TagE", !9, i64 0}
!30 = !{i8 0, i8 2}
!31 = !{}
!32 = !{!33, !16, i64 88}
!33 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner8Data_FcnE", !34, i64 0, !16, i64 88}
!34 = !{!"_ZTSN3HIR4PathE", !35, i64 0}
!35 = !{!"_ZTSN3HIR4Path4DataE", !36, i64 0, !9, i64 8}
!36 = !{!"_ZTSN3HIR4Path4Data3TagE", !9, i64 0}
!37 = !{!38, !40, i64 4}
!38 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !39, i64 0, !40, i64 4, !41, i64 8}
!39 = !{!"_ZTSN3HIR11LifetimeRefE", !16, i64 0}
!40 = !{!"_ZTSN3HIR10BorrowTypeE", !9, i64 0}
!41 = !{!"_ZTSN3HIR7TypeRefE", !8, i64 0}
!42 = !{!43, !40, i64 0}
!43 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !40, i64 0, !41, i64 8}
!44 = !{!45, !19, i64 96}
!45 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !46, i64 0, !19, i64 96, !19, i64 97, !63, i64 104, !41, i64 112, !64, i64 120}
!46 = !{!"_ZTSN3HIR13GenericParamsE", !47, i64 0, !51, i64 24, !55, i64 48, !59, i64 72}
!47 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !48, i64 0}
!48 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!51 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !52, i64 0}
!52 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!55 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!59 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!63 = !{!"_ZTS8RcString", !8, i64 0}
!64 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !65, i64 0}
!65 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !67, i64 0}
!67 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!68 = !{!45, !19, i64 97}
!69 = !{!70, !8, i64 0}
!70 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !8, i64 0}
!71 = !{!72, !8, i64 0}
!72 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !8, i64 0}


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