; LLVM IR from thepowersgang/mrustc :: src/mir/helpers.ll (ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE)

; 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.MonomorphState = type { %class.MonomorphiserPP, %"class.HIR::TypeRef", ptr, ptr, %"struct.HIR::PathParams" }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.236" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.236" = type { %"struct.std::_Vector_base.237" }
%"struct.std::_Vector_base.237" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.41, %class.ThinVector.42, %class.ThinVector.43 }
%class.ThinVector.41 = type { ptr }
%class.ThinVector.42 = type { ptr }
%class.ThinVector.43 = type { ptr }
%"class.StaticTraitResolve::ValuePtr" = type { i32, %"union.StaticTraitResolve::ValuePtr::DataUnion" }
%"union.StaticTraitResolve::ValuePtr::DataUnion" = type { %"struct.StaticTraitResolve::ValuePtr::Data_EnumConstructor" }
%"struct.StaticTraitResolve::ValuePtr::Data_EnumConstructor" = type { ptr, i64 }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.394 = type { ptr, ptr }
%class.anon.395 = type { ptr, ptr, ptr }
%class.anon.396 = type { ptr, 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.319", %"class.std::vector.324", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.319" = type { %"struct.std::_Vector_base.320" }
%"struct.std::_Vector_base.320" = 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.324" = type { %"struct.std::_Vector_base.325" }
%"struct.std::_Vector_base.325" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"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.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.45" }
%"struct.std::_Head_base.45" = type { ptr }
%"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 }
%class.anon.397 = type { ptr, ptr }
%class.anon.398 = type { ptr }
%"struct.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector" }
%"class.HIR::GenericParams" = type { %"class.std::vector.197", %"class.std::vector.202", %"class.std::vector.207", %"class.std::vector.212" }
%"class.std::vector.197" = type { %"struct.std::_Vector_base.198" }
%"struct.std::_Vector_base.198" = 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.202" = type { %"struct.std::_Vector_base.203" }
%"struct.std::_Vector_base.203" = 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.207" = type { %"struct.std::_Vector_base.208" }
%"struct.std::_Vector_base.208" = 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.212" = type { %"struct.std::_Vector_base.213" }
%"struct.std::_Vector_base.213" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.anon.399 = type { ptr, ptr }
%class.anon.400 = type { ptr, ptr }
%"struct.MIR::Constant::Data_Int" = type <{ %class.S128, i32, [4 x i8] }>
%class.S128 = type { %class.U128 }
%class.U128 = type { i64, i64 }
%"struct.MIR::Constant::Data_Uint" = type <{ %class.U128, i32, [4 x i8] }>
%"struct.MIR::Constant::Data_Float" = type { double, i32 }
%"class.MIR::TypeResolve" = type { i32, ptr, ptr, ptr, %struct.FmtLambda, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.FmtLambda = type { %"class.std::function" }
%"struct.MIR::Constant::Data_Const" = type { %"class.std::unique_ptr.386" }
%"class.std::unique_ptr.386" = type { %"struct.std::__uniq_ptr_data.387" }
%"struct.std::__uniq_ptr_data.387" = type { %"class.std::__uniq_ptr_impl.388" }
%"class.std::__uniq_ptr_impl.388" = type { %"class.std::tuple.389" }
%"class.std::tuple.389" = type { %"struct.std::_Tuple_impl.390" }
%"struct.std::_Tuple_impl.390" = type { %"struct.std::_Head_base.393" }
%"struct.std::_Head_base.393" = type { ptr }
%"class.HIR::Constant" = type { %"class.HIR::GenericParams", %"class.HIR::TypeRef", %"class.HIR::ExprPtr", %struct.EncodedLiteral, i32, %"class.std::map.230" }
%"class.HIR::ExprPtr" = type { %"class.HIR::ExprPtrInner", %"class.std::vector", %"class.std::vector", %"class.MIR::FunctionPointer", %"class.HIR::ExprStatePtr" }
%"class.HIR::ExprPtrInner" = type { ptr }
%"class.MIR::FunctionPointer" = type { ptr }
%"class.HIR::ExprStatePtr" = type { ptr }
%struct.EncodedLiteral = type { %"class.std::vector.220", %"class.std::vector.225" }
%"class.std::vector.220" = type { %"struct.std::_Vector_base.221" }
%"struct.std::_Vector_base.221" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.225" = type { %"struct.std::_Vector_base.226" }
%"struct.std::_Vector_base.226" = type { %"struct.std::_Vector_base<Reloc, std::allocator<Reloc>>::_Vector_impl" }
%"struct.std::_Vector_base<Reloc, std::allocator<Reloc>>::_Vector_impl" = type { %"struct.std::_Vector_base<Reloc, std::allocator<Reloc>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Reloc, std::allocator<Reloc>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.230" = type { %"class.std::_Rb_tree.231" }
%"class.std::_Rb_tree.231" = type { %"struct.std::_Rb_tree<HIR::Path, std::pair<const HIR::Path, EncodedLiteral>, std::_Select1st<std::pair<const HIR::Path, EncodedLiteral>>, std::less<HIR::Path>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::Path, std::pair<const HIR::Path, EncodedLiteral>, std::_Select1st<std::pair<const HIR::Path, EncodedLiteral>>, std::less<HIR::Path>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.HIR::GenericRef" = type <{ %class.RcString, i32, [4 x i8] }>
%"struct.MIR::Constant::Data_Function" = type { %"class.std::unique_ptr.386" }
%"struct.StaticTraitResolve::ValuePtr::Data_StructConstructor" = type { ptr, ptr }
%"class.HIR::Static" = type { %"class.HIR::GenericParams", %"struct.HIR::Linkage", i8, %"class.HIR::TypeRef", %"class.HIR::ExprPtr", %struct.EncodedLiteral, i8, i8, i8, %"class.std::map.230" }
%"struct.HIR::Linkage" = type { i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

@.str.6 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE = external hidden unnamed_addr constant [79 x i8], align 1
@__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE = external hidden unnamed_addr constant [15 x i8], align 1

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

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

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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

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

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

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

declare void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull align 8 dereferenceable(40) %2) #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i8, align 1
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca ptr, align 8
  %12 = alloca i8, align 1
  %13 = alloca ptr, align 8
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca i8, align 1
  %19 = alloca ptr, align 8
  %20 = alloca %"class.HIR::TypeRef", align 8
  %21 = alloca %"class.HIR::TypeRef", align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i8, align 1
  %25 = alloca ptr, align 8
  %26 = alloca %"class.HIR::TypeRef", align 8
  %27 = alloca i8, align 1
  %28 = alloca ptr, align 8
  %29 = alloca %struct.MonomorphState, align 8
  %30 = alloca %"class.StaticTraitResolve::ValuePtr", align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i1, align 1
  %34 = alloca ptr, align 8
  %35 = alloca %"class.std::function", align 8
  %36 = alloca %class.anon.394, align 8
  %37 = alloca i8, align 1
  %38 = alloca ptr, align 8
  %39 = alloca i8, align 1
  %40 = alloca ptr, align 8
  %41 = alloca %struct.MonomorphState, align 8
  %42 = alloca %"class.StaticTraitResolve::ValuePtr", align 8
  %43 = alloca i8, align 1
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca %"class.std::function", align 8
  %47 = alloca %class.anon.395, align 8
  %48 = alloca i8, align 1
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca %"class.std::function", align 8
  %52 = alloca %class.anon.396, align 8
  %53 = alloca i8, align 1
  %54 = alloca ptr, align 8
  %55 = alloca %"class.HIR::TypeData", align 8
  %56 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %57 = alloca i8, align 1
  %58 = alloca ptr, align 8
  %59 = alloca %"class.HIR::TypeData", align 8
  %60 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %61 = alloca %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor", align 8
  %62 = alloca i8, align 1
  %63 = alloca ptr, align 8
  %64 = alloca %"class.HIR::TypeData", align 8
  %65 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %66 = alloca i8, align 1
  %67 = alloca ptr, align 8
  %68 = alloca %struct.MonomorphState, align 8
  %69 = alloca %"class.StaticTraitResolve::ValuePtr", align 8
  %70 = alloca i8, align 1
  %71 = alloca ptr, align 8
  %72 = alloca i8, align 1
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca %"class.std::function", align 8
  %76 = alloca %class.anon.397, align 8
  %77 = alloca i8, align 1
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca %"class.std::function", align 8
  %81 = alloca %class.anon.398, align 8
  %82 = alloca i8, align 1
  %83 = alloca ptr, align 8
  %84 = alloca ptr, align 8
  %85 = alloca %"class.HIR::TypeRef", align 8
  %86 = alloca %"class.HIR::TypeRef", align 8
  %87 = alloca %"class.HIR::TypeRef", align 8
  %88 = alloca %"class.HIR::TypeRef", align 8
  %89 = alloca i8, align 1
  %90 = alloca ptr, align 8
  %91 = alloca ptr, align 8
  %92 = alloca %"class.HIR::TypeRef", align 8
  %93 = alloca %"class.HIR::TypeRef", align 8
  %94 = alloca %"class.HIR::TypeRef", align 8
  %95 = alloca %"class.HIR::TypeRef", align 8
  %96 = alloca i8, align 1
  %97 = alloca ptr, align 8
  %98 = alloca i1, align 1
  %99 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %100 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %101 = alloca i8, align 1
  %102 = alloca ptr, align 8
  %103 = alloca ptr, align 8
  %104 = alloca %"class.std::function", align 8
  %105 = alloca %class.anon.399, align 8
  %106 = alloca i8, align 1
  %107 = alloca ptr, align 8
  %108 = alloca i1, align 1
  %109 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %110 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %111 = alloca %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor", align 8
  %112 = alloca i8, align 1
  %113 = alloca ptr, align 8
  %114 = alloca ptr, align 8
  %115 = alloca %"class.std::function", align 8
  %116 = alloca %class.anon.400, align 8
  %117 = alloca i8, align 1
  %118 = alloca ptr, align 8
  %119 = alloca i1, align 1
  %120 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %121 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %122 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #7
  store i8 1, ptr %7, align 1, !tbaa !9
  br label %123

123:                                              ; preds = %1356, %3
  %124 = load i8, ptr %7, align 1, !tbaa !9, !range !11, !noundef !12
  %125 = trunc i8 %124 to i1
  br i1 %125, label %127, label %126

126:                                              ; preds = %123
  store i32 2, ptr %8, align 4
  br label %1357

127:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %128 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %128, ptr %9, align 8, !tbaa !5
  br label %129

129:                                              ; preds = %1351, %127
  %130 = load i8, ptr %7, align 1, !tbaa !9, !range !11, !noundef !12
  %131 = trunc i8 %130 to i1
  br i1 %131, label %133, label %132

132:                                              ; preds = %129
  store i32 5, ptr %8, align 4
  br label %1352

133:                                              ; preds = %129
  %134 = load ptr, ptr %9, align 8, !tbaa !5
  %135 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %134)
  switch i32 %135, label %1350 [
    i32 0, label %136
    i32 1, label %137
    i32 2, label %162
    i32 3, label %187
    i32 4, label %212
    i32 5, label %234
    i32 6, label %269
    i32 7, label %296
    i32 8, label %398
    i32 9, label %429
    i32 10, label %728
  ]

136:                                              ; preds = %133
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 243, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE) #8
  unreachable

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

138:                                              ; preds = %158, %137
  %139 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %140 = trunc i8 %139 to i1
  br i1 %140, label %142, label %141

141:                                              ; preds = %138
  store i32 9, ptr %8, align 4
  br label %159

142:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %143 = load ptr, ptr %9, align 8, !tbaa !5
  %144 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %143)
  store ptr %144, ptr %11, align 8, !tbaa !5
  br label %145

145:                                              ; preds = %154, %142
  %146 = load ptr, ptr %11, align 8, !tbaa !5
  %147 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %148 = trunc i8 %147 to i1
  br i1 %148, label %150, label %149

149:                                              ; preds = %145
  store i32 12, ptr %8, align 4
  br label %155

150:                                              ; preds = %145
  %151 = load ptr, ptr %11, align 8, !tbaa !5
  %152 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %151, i32 0, i32 1
  %153 = load i32, ptr %152, align 8, !tbaa !13
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %153)
  store i32 1, ptr %8, align 4
  br label %155

154:                                              ; No predecessors!
  store i8 0, ptr %10, align 1, !tbaa !9
  br label %145, !llvm.loop !19

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

157:                                              ; preds = %155
  br label %158

158:                                              ; preds = %157
  store i8 0, ptr %10, align 1, !tbaa !9
  br label %138, !llvm.loop !21

159:                                              ; preds = %155, %141
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #7
  %160 = load i32, ptr %8, align 4
  switch i32 %160, label %1352 [
    i32 9, label %161
  ]

161:                                              ; preds = %159
  br label %1350

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

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

166:                                              ; preds = %163
  store i32 15, ptr %8, align 4
  br label %184

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

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

174:                                              ; preds = %170
  store i32 18, ptr %8, align 4
  br label %180

175:                                              ; preds = %170
  %176 = load ptr, ptr %13, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %176, i32 0, i32 1
  %178 = load i32, ptr %177, align 8, !tbaa !22
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %178)
  store i32 1, ptr %8, align 4
  br label %180

179:                                              ; No predecessors!
  store i8 0, ptr %12, align 1, !tbaa !9
  br label %170, !llvm.loop !24

180:                                              ; preds = %175, %174
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  %181 = load i32, ptr %8, align 4
  switch i32 %181, label %184 [
    i32 18, label %182
  ]

182:                                              ; preds = %180
  br label %183

183:                                              ; preds = %182
  store i8 0, ptr %12, align 1, !tbaa !9
  br label %163, !llvm.loop !25

184:                                              ; preds = %180, %166
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  %185 = load i32, ptr %8, align 4
  switch i32 %185, label %1352 [
    i32 15, label %186
  ]

186:                                              ; preds = %184
  br label %1350

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

188:                                              ; preds = %208, %187
  %189 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %190 = trunc i8 %189 to i1
  br i1 %190, label %192, label %191

191:                                              ; preds = %188
  store i32 21, ptr %8, align 4
  br label %209

192:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %193 = load ptr, ptr %9, align 8, !tbaa !5
  %194 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %193)
  store ptr %194, ptr %15, align 8, !tbaa !5
  br label %195

195:                                              ; preds = %204, %192
  %196 = load ptr, ptr %15, align 8, !tbaa !5
  %197 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %198 = trunc i8 %197 to i1
  br i1 %198, label %200, label %199

199:                                              ; preds = %195
  store i32 24, ptr %8, align 4
  br label %205

200:                                              ; preds = %195
  %201 = load ptr, ptr %15, align 8, !tbaa !5
  %202 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %201, i32 0, i32 1
  %203 = load i32, ptr %202, align 8, !tbaa !26
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %203)
  store i32 1, ptr %8, align 4
  br label %205

204:                                              ; No predecessors!
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %195, !llvm.loop !29

205:                                              ; preds = %200, %199
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  %206 = load i32, ptr %8, align 4
  switch i32 %206, label %209 [
    i32 24, label %207
  ]

207:                                              ; preds = %205
  br label %208

208:                                              ; preds = %207
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %188, !llvm.loop !30

209:                                              ; preds = %205, %191
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  %210 = load i32, ptr %8, align 4
  switch i32 %210, label %1352 [
    i32 21, label %211
  ]

211:                                              ; preds = %209
  br label %1350

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

213:                                              ; preds = %230, %212
  %214 = load i8, ptr %16, align 1, !tbaa !9, !range !11, !noundef !12
  %215 = trunc i8 %214 to i1
  br i1 %215, label %217, label %216

216:                                              ; preds = %213
  store i32 27, ptr %8, align 4
  br label %231

217:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %218 = load ptr, ptr %9, align 8, !tbaa !5
  %219 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %218)
  store ptr %219, ptr %17, align 8, !tbaa !5
  br label %220

220:                                              ; preds = %226, %217
  %221 = load ptr, ptr %17, align 8, !tbaa !5
  %222 = load i8, ptr %16, align 1, !tbaa !9, !range !11, !noundef !12
  %223 = trunc i8 %222 to i1
  br i1 %223, label %225, label %224

224:                                              ; preds = %220
  store i32 30, ptr %8, align 4
  br label %227

225:                                              ; preds = %220
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 14)
  store i32 1, ptr %8, align 4
  br label %227

226:                                              ; No predecessors!
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %220, !llvm.loop !31

227:                                              ; preds = %225, %224
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  %228 = load i32, ptr %8, align 4
  switch i32 %228, label %231 [
    i32 30, label %229
  ]

229:                                              ; preds = %227
  br label %230

230:                                              ; preds = %229
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %213, !llvm.loop !32

231:                                              ; preds = %227, %216
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  %232 = load i32, ptr %8, align 4
  switch i32 %232, label %1352 [
    i32 27, label %233
  ]

233:                                              ; preds = %231
  br label %1350

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

235:                                              ; preds = %265, %234
  %236 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %237 = trunc i8 %236 to i1
  br i1 %237, label %239, label %238

238:                                              ; preds = %235
  store i32 33, ptr %8, align 4
  br label %266

239:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3MIR8Constant8as_BytesEv(ptr noundef nonnull align 8 dereferenceable(40) %240)
  store ptr %241, ptr %19, align 8, !tbaa !5
  br label %242

242:                                              ; preds = %261, %239
  %243 = load ptr, ptr %19, align 8, !tbaa !5
  %244 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %245 = trunc i8 %244 to i1
  br i1 %245, label %247, label %246

246:                                              ; preds = %242
  store i32 36, ptr %8, align 4
  br label %262

247:                                              ; preds = %242
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %21, i32 noundef 2)
  %248 = load ptr, ptr %19, align 8, !tbaa !5
  %249 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %248) #7
  invoke void @_ZN3HIR7TypeRef9new_arrayES0_m(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %20, ptr noundef %21, i64 noundef %249)
          to label %250 unwind label %252

250:                                              ; preds = %247
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef 0, ptr noundef %20)
          to label %251 unwind label %256

251:                                              ; preds = %250
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  store i32 1, ptr %8, align 4
  br label %262

252:                                              ; preds = %247
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %22, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %23, align 4
  br label %260

256:                                              ; preds = %250
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %22, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #7
  br label %260

260:                                              ; preds = %256, %252
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  br label %1354

261:                                              ; No predecessors!
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %242, !llvm.loop !33

262:                                              ; preds = %251, %246
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  %263 = load i32, ptr %8, align 4
  switch i32 %263, label %266 [
    i32 36, label %264
  ]

264:                                              ; preds = %262
  br label %265

265:                                              ; preds = %264
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %235, !llvm.loop !34

266:                                              ; preds = %262, %238
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  %267 = load i32, ptr %8, align 4
  switch i32 %267, label %1352 [
    i32 33, label %268
  ]

268:                                              ; preds = %266
  br label %1350

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

270:                                              ; preds = %292, %269
  %271 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %272 = trunc i8 %271 to i1
  br i1 %272, label %274, label %273

273:                                              ; preds = %270
  store i32 39, ptr %8, align 4
  br label %293

274:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %275 = load ptr, ptr %9, align 8, !tbaa !5
  %276 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR8Constant15as_StaticStringB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(40) %275)
  store ptr %276, ptr %25, align 8, !tbaa !5
  br label %277

277:                                              ; preds = %288, %274
  %278 = load ptr, ptr %25, align 8, !tbaa !5
  %279 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %280 = trunc i8 %279 to i1
  br i1 %280, label %282, label %281

281:                                              ; preds = %277
  store i32 42, ptr %8, align 4
  br label %289

282:                                              ; preds = %277
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef 16)
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef 0, ptr noundef %26)
          to label %283 unwind label %284

283:                                              ; preds = %282
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #7
  store i32 1, ptr %8, align 4
  br label %289

284:                                              ; preds = %282
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %22, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  br label %1354

288:                                              ; No predecessors!
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %277, !llvm.loop !35

289:                                              ; preds = %283, %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  %290 = load i32, ptr %8, align 4
  switch i32 %290, label %293 [
    i32 42, label %291
  ]

291:                                              ; preds = %289
  br label %292

292:                                              ; preds = %291
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %270, !llvm.loop !36

293:                                              ; preds = %289, %273
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  %294 = load i32, ptr %8, align 4
  switch i32 %294, label %1352 [
    i32 39, label %295
  ]

295:                                              ; preds = %293
  br label %1350

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

297:                                              ; preds = %394, %296
  %298 = load i8, ptr %27, align 1, !tbaa !9, !range !11, !noundef !12
  %299 = trunc i8 %298 to i1
  br i1 %299, label %301, label %300

300:                                              ; preds = %297
  store i32 45, ptr %8, align 4
  br label %395

301:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %302 = load ptr, ptr %9, align 8, !tbaa !5
  %303 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant8as_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %302)
  store ptr %303, ptr %28, align 8, !tbaa !5
  br label %304

304:                                              ; preds = %388, %301
  %305 = load ptr, ptr %28, align 8, !tbaa !5
  %306 = load i8, ptr %27, align 1, !tbaa !9, !range !11, !noundef !12
  %307 = trunc i8 %306 to i1
  br i1 %307, label %309, label %308

308:                                              ; preds = %304
  store i32 48, ptr %8, align 4
  br label %391

309:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 144, ptr %29) #7
  call void @_ZN14MonomorphStateC2Ev(ptr noundef nonnull align 8 dereferenceable(144) %29)
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #7
  %310 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %311 = load ptr, ptr %310, align 8, !tbaa !37
  %312 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %313 = load ptr, ptr %312, align 8, !tbaa !43
  %314 = load ptr, ptr %28, align 8, !tbaa !5
  %315 = getelementptr inbounds %"struct.MIR::Constant::Data_Const", ptr %314, i32 0, i32 0
  %316 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %315) #7
  invoke void @_ZNK18StaticTraitResolve9get_valueERK4SpanRKN3HIR4PathER14MonomorphStatebPPKNS3_13GenericParamsE(ptr dead_on_unwind writable sret(%"class.StaticTraitResolve::ValuePtr") align 8 %30, ptr noundef nonnull align 8 dereferenceable(424) %311, ptr noundef nonnull align 8 dereferenceable(8) %313, ptr noundef nonnull align 8 dereferenceable(88) %316, ptr noundef nonnull align 8 dereferenceable(144) %29, i1 noundef zeroext true, ptr noundef null)
          to label %317 unwind label %340

317:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %318 = invoke noundef ptr @_ZN18StaticTraitResolve8ValuePtr12opt_ConstantEv(ptr noundef nonnull align 8 dereferenceable(24) %30)
          to label %319 unwind label %344

319:                                              ; preds = %317
  store ptr %318, ptr %31, align 8, !tbaa !5
  %320 = load ptr, ptr %31, align 8, !tbaa !5
  %321 = icmp ne ptr %320, null
  br i1 %321, label %322, label %363

322:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %323 = load ptr, ptr %31, align 8, !tbaa !5
  %324 = load ptr, ptr %323, align 8, !tbaa !5
  %325 = getelementptr inbounds %"class.HIR::Constant", ptr %324, i32 0, i32 1
  store ptr %325, ptr %32, align 8, !tbaa !5
  %326 = load ptr, ptr %32, align 8, !tbaa !5
  %327 = invoke noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8) %326, i1 noundef zeroext false)
          to label %328 unwind label %348

328:                                              ; preds = %322
  br i1 %327, label %329, label %358

329:                                              ; preds = %328
  store i1 false, ptr %33, align 1
  %330 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %331 = load ptr, ptr %330, align 8, !tbaa !43
  %332 = load ptr, ptr %32, align 8, !tbaa !5
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(96) %29, ptr noundef nonnull align 8 dereferenceable(8) %331, ptr noundef nonnull align 8 dereferenceable(8) %332, i1 noundef zeroext true)
          to label %333 unwind label %348

333:                                              ; preds = %329
  %334 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %335 = load ptr, ptr %334, align 8, !tbaa !37
  %336 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %337 = load ptr, ptr %336, align 8, !tbaa !43
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %335, ptr noundef nonnull align 8 dereferenceable(8) %337, ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %338 unwind label %352

338:                                              ; preds = %333
  store i1 true, ptr %33, align 1
  store i32 1, ptr %8, align 4
  %339 = load i1, ptr %33, align 1
  br i1 %339, label %357, label %356

340:                                              ; preds = %309
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %22, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %23, align 4
  br label %390

344:                                              ; preds = %317
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %22, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %23, align 4
  br label %389

348:                                              ; preds = %358, %329, %322
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %22, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %23, align 4
  br label %362

352:                                              ; preds = %333
  %353 = landingpad { ptr, i32 }
          cleanup
  %354 = extractvalue { ptr, i32 } %353, 0
  store ptr %354, ptr %22, align 8
  %355 = extractvalue { ptr, i32 } %353, 1
  store i32 %355, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %362

356:                                              ; preds = %338
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %357

357:                                              ; preds = %356, %338
  br label %361

358:                                              ; preds = %328
  %359 = load ptr, ptr %32, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %359)
          to label %360 unwind label %348

360:                                              ; preds = %358
  store i32 1, ptr %8, align 4
  br label %361

361:                                              ; preds = %360, %357
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  br label %382

362:                                              ; preds = %352, %348
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  br label %389

363:                                              ; preds = %319
  br label %364

364:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #7
  %365 = getelementptr inbounds %class.anon.394, ptr %36, i32 0, i32 0
  store ptr %34, ptr %365, align 8, !tbaa !5
  %366 = getelementptr inbounds %class.anon.394, ptr %36, i32 0, i32 1
  %367 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %367, ptr %366, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(16) %36) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %122, ptr noundef %35)
          to label %368 unwind label %370

368:                                              ; preds = %364
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #7
  %369 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %369, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %369, ptr @_ZTIPKc, ptr null) #9
          to label %1367 unwind label %374

370:                                              ; preds = %364
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %22, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %23, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #7
  br label %378

374:                                              ; preds = %368
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %22, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %23, align 4
  br label %378

378:                                              ; preds = %374, %370
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  br label %389

379:                                              ; No predecessors!
  br label %380

380:                                              ; preds = %379
  br label %381

381:                                              ; preds = %380
  store i32 0, ptr %8, align 4
  br label %382

382:                                              ; preds = %381, %361
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  %383 = load i32, ptr %8, align 4
  switch i32 %383, label %385 [
    i32 0, label %384
  ]

384:                                              ; preds = %382
  store i32 0, ptr %8, align 4
  br label %385

385:                                              ; preds = %384, %382
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %29) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %29) #7
  %386 = load i32, ptr %8, align 4
  switch i32 %386, label %391 [
    i32 0, label %387
  ]

387:                                              ; preds = %385
  br label %388

388:                                              ; preds = %387
  store i8 0, ptr %27, align 1, !tbaa !9
  br label %304, !llvm.loop !44

389:                                              ; preds = %378, %362, %344
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #7
  br label %390

390:                                              ; preds = %389, %340
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %29) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  br label %1354

391:                                              ; preds = %385, %308
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  %392 = load i32, ptr %8, align 4
  switch i32 %392, label %395 [
    i32 48, label %393
  ]

393:                                              ; preds = %391
  br label %394

394:                                              ; preds = %393
  store i8 0, ptr %27, align 1, !tbaa !9
  br label %297, !llvm.loop !45

395:                                              ; preds = %391, %300
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  %396 = load i32, ptr %8, align 4
  switch i32 %396, label %1352 [
    i32 45, label %397
  ]

397:                                              ; preds = %395
  br label %1350

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

399:                                              ; preds = %425, %398
  %400 = load i8, ptr %37, align 1, !tbaa !9, !range !11, !noundef !12
  %401 = trunc i8 %400 to i1
  br i1 %401, label %403, label %402

402:                                              ; preds = %399
  store i32 53, ptr %8, align 4
  br label %426

403:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %404 = load ptr, ptr %9, align 8, !tbaa !5
  %405 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3MIR8Constant10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %404)
  store ptr %405, ptr %38, align 8, !tbaa !5
  br label %406

406:                                              ; preds = %421, %403
  %407 = load ptr, ptr %38, align 8, !tbaa !5
  %408 = load i8, ptr %37, align 1, !tbaa !9, !range !11, !noundef !12
  %409 = trunc i8 %408 to i1
  br i1 %409, label %411, label %410

410:                                              ; preds = %406
  store i32 56, ptr %8, align 4
  br label %422

411:                                              ; preds = %406
  %412 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %413 = load ptr, ptr %412, align 8, !tbaa !37
  %414 = getelementptr inbounds i8, ptr %413, i64 8
  %415 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %416 = load ptr, ptr %415, align 8, !tbaa !43
  %417 = load ptr, ptr %38, align 8, !tbaa !5
  %418 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %417, i32 0, i32 1
  %419 = load i32, ptr %418, align 8, !tbaa !46
  %420 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK18TraitResolveCommon20get_const_param_typeERK4Spanj(ptr noundef nonnull align 8 dereferenceable(216) %414, ptr noundef nonnull align 8 dereferenceable(8) %416, i32 noundef %419)
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %420)
  store i32 1, ptr %8, align 4
  br label %422

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

422:                                              ; preds = %411, %410
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  %423 = load i32, ptr %8, align 4
  switch i32 %423, label %426 [
    i32 56, label %424
  ]

424:                                              ; preds = %422
  br label %425

425:                                              ; preds = %424
  store i8 0, ptr %37, align 1, !tbaa !9
  br label %399, !llvm.loop !50

426:                                              ; preds = %422, %402
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  %427 = load i32, ptr %8, align 4
  switch i32 %427, label %1352 [
    i32 53, label %428
  ]

428:                                              ; preds = %426
  br label %1350

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

430:                                              ; preds = %724, %429
  %431 = load i8, ptr %39, align 1, !tbaa !9, !range !11, !noundef !12
  %432 = trunc i8 %431 to i1
  br i1 %432, label %434, label %433

433:                                              ; preds = %430
  store i32 59, ptr %8, align 4
  br label %725

434:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %435 = load ptr, ptr %9, align 8, !tbaa !5
  %436 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(40) %435)
  store ptr %436, ptr %40, align 8, !tbaa !5
  br label %437

437:                                              ; preds = %719, %434
  %438 = load ptr, ptr %40, align 8, !tbaa !5
  %439 = load i8, ptr %39, align 1, !tbaa !9, !range !11, !noundef !12
  %440 = trunc i8 %439 to i1
  br i1 %440, label %442, label %441

441:                                              ; preds = %437
  store i32 62, ptr %8, align 4
  br label %721

442:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 144, ptr %41) #7
  call void @_ZN14MonomorphStateC2Ev(ptr noundef nonnull align 8 dereferenceable(144) %41)
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #7
  %443 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %444 = load ptr, ptr %443, align 8, !tbaa !37
  %445 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %446 = load ptr, ptr %445, align 8, !tbaa !43
  %447 = load ptr, ptr %40, align 8, !tbaa !5
  %448 = getelementptr inbounds %"struct.MIR::Constant::Data_Function", ptr %447, i32 0, i32 0
  %449 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %448) #7
  invoke void @_ZNK18StaticTraitResolve9get_valueERK4SpanRKN3HIR4PathER14MonomorphStatebPPKNS3_13GenericParamsE(ptr dead_on_unwind writable sret(%"class.StaticTraitResolve::ValuePtr") align 8 %42, ptr noundef nonnull align 8 dereferenceable(424) %444, ptr noundef nonnull align 8 dereferenceable(8) %446, ptr noundef nonnull align 8 dereferenceable(88) %449, ptr noundef nonnull align 8 dereferenceable(144) %41, i1 noundef zeroext true, ptr noundef null)
          to label %450 unwind label %455

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

451:                                              ; preds = %712, %450
  %452 = load i8, ptr %43, align 1, !tbaa !9, !range !11, !noundef !12
  %453 = trunc i8 %452 to i1
  br i1 %453, label %459, label %454

454:                                              ; preds = %451
  store i32 65, ptr %8, align 4
  br label %713

455:                                              ; preds = %442
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %22, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %23, align 4
  br label %720

459:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  store ptr %42, ptr %44, align 8, !tbaa !5
  br label %460

460:                                              ; preds = %707, %459
  %461 = load i8, ptr %43, align 1, !tbaa !9, !range !11, !noundef !12
  %462 = trunc i8 %461 to i1
  br i1 %462, label %464, label %463

463:                                              ; preds = %460
  store i32 68, ptr %8, align 4
  br label %708

464:                                              ; preds = %460
  %465 = load ptr, ptr %44, align 8, !tbaa !5
  %466 = invoke noundef i32 @_ZNK18StaticTraitResolve8ValuePtr3tagEv(ptr noundef nonnull align 8 dereferenceable(24) %465)
          to label %467 unwind label %468

467:                                              ; preds = %464
  switch i32 %466, label %473 [
    i32 0, label %472
    i32 1, label %498
    i32 5, label %539
    i32 6, label %591
    i32 8, label %653
  ]

468:                                              ; preds = %464
  %469 = landingpad { ptr, i32 }
          cleanup
  %470 = extractvalue { ptr, i32 } %469, 0
  store ptr %470, ptr %22, align 8
  %471 = extractvalue { ptr, i32 } %469, 1
  store i32 %471, ptr %23, align 4
  br label %710

472:                                              ; preds = %467
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 285, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE) #8
  unreachable

473:                                              ; preds = %467
  br label %474

474:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #7
  %475 = getelementptr inbounds %class.anon.395, ptr %47, i32 0, i32 0
  store ptr %45, ptr %475, align 8, !tbaa !5
  %476 = getelementptr inbounds %class.anon.395, ptr %47, i32 0, i32 1
  store ptr %42, ptr %476, align 8, !tbaa !5
  %477 = getelementptr inbounds %class.anon.395, ptr %47, i32 0, i32 2
  %478 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %478, ptr %477, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 8 dereferenceable(24) %47)
          to label %479 unwind label %482

479:                                              ; preds = %474
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %122, ptr noundef %46)
          to label %480 unwind label %486

480:                                              ; preds = %479
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #7
  %481 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %481, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %481, ptr @_ZTIPKc, ptr null) #9
          to label %1367 unwind label %491

482:                                              ; preds = %474
  %483 = landingpad { ptr, i32 }
          cleanup
  %484 = extractvalue { ptr, i32 } %483, 0
  store ptr %484, ptr %22, align 8
  %485 = extractvalue { ptr, i32 } %483, 1
  store i32 %485, ptr %23, align 4
  br label %490

486:                                              ; preds = %479
  %487 = landingpad { ptr, i32 }
          cleanup
  %488 = extractvalue { ptr, i32 } %487, 0
  store ptr %488, ptr %22, align 8
  %489 = extractvalue { ptr, i32 } %487, 1
  store i32 %489, ptr %23, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br label %490

490:                                              ; preds = %486, %482
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #7
  br label %495

491:                                              ; preds = %480
  %492 = landingpad { ptr, i32 }
          cleanup
  %493 = extractvalue { ptr, i32 } %492, 0
  store ptr %493, ptr %22, align 8
  %494 = extractvalue { ptr, i32 } %492, 1
  store i32 %494, ptr %23, align 4
  br label %495

495:                                              ; preds = %491, %490
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %710

496:                                              ; No predecessors!
  br label %497

497:                                              ; preds = %496
  br label %706

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

499:                                              ; preds = %537, %498
  %500 = load i8, ptr %48, align 1, !tbaa !9, !range !11, !noundef !12
  %501 = trunc i8 %500 to i1
  br i1 %501, label %503, label %502

502:                                              ; preds = %499
  store i32 74, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  br label %538

503:                                              ; preds = %499
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %504 = load ptr, ptr %44, align 8, !tbaa !5
  %505 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN18StaticTraitResolve8ValuePtr11as_NotFoundEv(ptr noundef nonnull align 8 dereferenceable(24) %504)
          to label %506 unwind label %512

506:                                              ; preds = %503
  store ptr %505, ptr %49, align 8, !tbaa !5
  br label %507

507:                                              ; preds = %534, %506
  %508 = load ptr, ptr %49, align 8, !tbaa !5
  %509 = load i8, ptr %48, align 1, !tbaa !9, !range !11, !noundef !12
  %510 = trunc i8 %509 to i1
  br i1 %510, label %516, label %511

511:                                              ; preds = %507
  store i32 77, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  br label %536

512:                                              ; preds = %503
  %513 = landingpad { ptr, i32 }
          cleanup
  %514 = extractvalue { ptr, i32 } %513, 0
  store ptr %514, ptr %22, align 8
  %515 = extractvalue { ptr, i32 } %513, 1
  store i32 %515, ptr %23, align 4
  br label %535

516:                                              ; preds = %507
  br label %517

517:                                              ; preds = %516
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #7
  %518 = getelementptr inbounds %class.anon.396, ptr %52, i32 0, i32 0
  store ptr %50, ptr %518, align 8, !tbaa !5
  %519 = getelementptr inbounds %class.anon.396, ptr %52, i32 0, i32 1
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %520, ptr %519, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(16) %52) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %122, ptr noundef %51)
          to label %521 unwind label %523

521:                                              ; preds = %517
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #7
  %522 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %522, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %522, ptr @_ZTIPKc, ptr null) #9
          to label %1367 unwind label %527

523:                                              ; preds = %517
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %22, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %23, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #7
  br label %531

527:                                              ; preds = %521
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %22, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %23, align 4
  br label %531

531:                                              ; preds = %527, %523
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  br label %535

532:                                              ; No predecessors!
  br label %533

533:                                              ; preds = %532
  br label %534

534:                                              ; preds = %533
  store i8 0, ptr %48, align 1, !tbaa !9
  br label %507, !llvm.loop !51

535:                                              ; preds = %531, %512
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  br label %710

536:                                              ; preds = %511
  br label %537

537:                                              ; preds = %536
  store i8 0, ptr %48, align 1, !tbaa !9
  br label %499, !llvm.loop !52

538:                                              ; preds = %502
  br label %706

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

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

543:                                              ; preds = %540
  store i32 82, ptr %8, align 4
  br label %588

544:                                              ; preds = %540
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  %545 = load ptr, ptr %44, align 8, !tbaa !5
  %546 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN18StaticTraitResolve8ValuePtr11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(24) %545)
          to label %547 unwind label %553

547:                                              ; preds = %544
  store ptr %546, ptr %54, align 8, !tbaa !5
  br label %548

548:                                              ; preds = %582, %547
  %549 = load ptr, ptr %54, align 8, !tbaa !5
  %550 = load i8, ptr %53, align 1, !tbaa !9, !range !11, !noundef !12
  %551 = trunc i8 %550 to i1
  br i1 %551, label %557, label %552

552:                                              ; preds = %548
  store i32 85, ptr %8, align 4
  br label %583

553:                                              ; preds = %557, %544
  %554 = landingpad { ptr, i32 }
          cleanup
  %555 = extractvalue { ptr, i32 } %554, 0
  store ptr %555, ptr %22, align 8
  %556 = extractvalue { ptr, i32 } %554, 1
  store i32 %556, ptr %23, align 4
  br label %585

557:                                              ; preds = %548
  %558 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %56, i32 0, i32 0
  %559 = load ptr, ptr %40, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.MIR::Constant::Data_Function", ptr %559, i32 0, i32 0
  %561 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %560) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %558, ptr noundef nonnull align 8 dereferenceable(88) %561)
          to label %562 unwind label %553

562:                                              ; preds = %557
  %563 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %56, i32 0, i32 1
  %564 = load ptr, ptr %54, align 8, !tbaa !5
  %565 = load ptr, ptr %564, align 8, !tbaa !5
  invoke void @_ZN3HIR25TypeData_NamedFunction_TyC2EPKNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(24) %563, ptr noundef %565)
          to label %566 unwind label %569

566:                                              ; preds = %562
  invoke void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %55, ptr noundef %56)
          to label %567 unwind label %573

567:                                              ; preds = %566
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %55)
          to label %568 unwind label %577

568:                                              ; preds = %567
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %55) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %56) #7
  store i32 1, ptr %8, align 4
  br label %583

569:                                              ; preds = %562
  %570 = landingpad { ptr, i32 }
          cleanup
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %22, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %23, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %558) #7
  br label %585

573:                                              ; preds = %566
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %22, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %23, align 4
  br label %581

577:                                              ; preds = %567
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %22, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %23, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %55) #7
  br label %581

581:                                              ; preds = %577, %573
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %56) #7
  br label %585

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

583:                                              ; preds = %568, %552
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  %584 = load i32, ptr %8, align 4
  switch i32 %584, label %588 [
    i32 85, label %586
  ]

585:                                              ; preds = %581, %569, %553
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #7
  br label %710

586:                                              ; preds = %583
  br label %587

587:                                              ; preds = %586
  store i8 0, ptr %53, align 1, !tbaa !9
  br label %540, !llvm.loop !54

588:                                              ; preds = %583, %543
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #7
  %589 = load i32, ptr %8, align 4
  switch i32 %589, label %708 [
    i32 82, label %590
  ]

590:                                              ; preds = %588
  br label %706

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

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

595:                                              ; preds = %592
  store i32 88, ptr %8, align 4
  br label %650

596:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  %597 = load ptr, ptr %44, align 8, !tbaa !5
  %598 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr18as_EnumConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %597)
          to label %599 unwind label %605

599:                                              ; preds = %596
  store ptr %598, ptr %58, align 8, !tbaa !5
  br label %600

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

604:                                              ; preds = %600
  store i32 91, ptr %8, align 4
  br label %645

605:                                              ; preds = %609, %596
  %606 = landingpad { ptr, i32 }
          cleanup
  %607 = extractvalue { ptr, i32 } %606, 0
  store ptr %607, ptr %22, align 8
  %608 = extractvalue { ptr, i32 } %606, 1
  store i32 %608, ptr %23, align 4
  br label %647

609:                                              ; preds = %600
  %610 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %60, i32 0, i32 0
  %611 = load ptr, ptr %40, align 8, !tbaa !5
  %612 = getelementptr inbounds %"struct.MIR::Constant::Data_Function", ptr %611, i32 0, i32 0
  %613 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %612) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %610, ptr noundef nonnull align 8 dereferenceable(88) %613)
          to label %614 unwind label %605

614:                                              ; preds = %609
  %615 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %60, i32 0, i32 1
  %616 = getelementptr inbounds %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor", ptr %61, i32 0, i32 0
  %617 = load ptr, ptr %58, align 8, !tbaa !5
  %618 = getelementptr inbounds %"struct.StaticTraitResolve::ValuePtr::Data_EnumConstructor", ptr %617, i32 0, i32 0
  %619 = load ptr, ptr %618, align 8, !tbaa !55
  store ptr %619, ptr %616, align 8, !tbaa !57
  %620 = getelementptr inbounds %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor", ptr %61, i32 0, i32 1
  %621 = load ptr, ptr %58, align 8, !tbaa !5
  %622 = getelementptr inbounds %"struct.StaticTraitResolve::ValuePtr::Data_EnumConstructor", ptr %621, i32 0, i32 1
  %623 = load i64, ptr %622, align 8, !tbaa !59
  store i64 %623, ptr %620, align 8, !tbaa !60
  %624 = getelementptr inbounds { ptr, i64 }, ptr %61, i32 0, i32 0
  %625 = load ptr, ptr %624, align 8
  %626 = getelementptr inbounds { ptr, i64 }, ptr %61, i32 0, i32 1
  %627 = load i64, ptr %626, align 8
  invoke void @_ZN3HIR25TypeData_NamedFunction_Ty20make_EnumConstructorENS0_20Data_EnumConstructorE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8 %615, ptr %625, i64 %627)
          to label %628 unwind label %631

628:                                              ; preds = %614
  invoke void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %59, ptr noundef %60)
          to label %629 unwind label %635

629:                                              ; preds = %628
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %59)
          to label %630 unwind label %639

630:                                              ; preds = %629
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %59) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %60) #7
  store i32 1, ptr %8, align 4
  br label %645

631:                                              ; preds = %614
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %22, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %23, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %610) #7
  br label %647

635:                                              ; preds = %628
  %636 = landingpad { ptr, i32 }
          cleanup
  %637 = extractvalue { ptr, i32 } %636, 0
  store ptr %637, ptr %22, align 8
  %638 = extractvalue { ptr, i32 } %636, 1
  store i32 %638, ptr %23, align 4
  br label %643

639:                                              ; preds = %629
  %640 = landingpad { ptr, i32 }
          cleanup
  %641 = extractvalue { ptr, i32 } %640, 0
  store ptr %641, ptr %22, align 8
  %642 = extractvalue { ptr, i32 } %640, 1
  store i32 %642, ptr %23, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %59) #7
  br label %643

643:                                              ; preds = %639, %635
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %60) #7
  br label %647

644:                                              ; No predecessors!
  store i8 0, ptr %57, align 1, !tbaa !9
  br label %600, !llvm.loop !61

645:                                              ; preds = %630, %604
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  %646 = load i32, ptr %8, align 4
  switch i32 %646, label %650 [
    i32 91, label %648
  ]

647:                                              ; preds = %643, %631, %605
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #7
  br label %710

648:                                              ; preds = %645
  br label %649

649:                                              ; preds = %648
  store i8 0, ptr %57, align 1, !tbaa !9
  br label %592, !llvm.loop !62

650:                                              ; preds = %645, %595
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #7
  %651 = load i32, ptr %8, align 4
  switch i32 %651, label %708 [
    i32 88, label %652
  ]

652:                                              ; preds = %650
  br label %706

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

654:                                              ; preds = %702, %653
  %655 = load i8, ptr %62, align 1, !tbaa !9, !range !11, !noundef !12
  %656 = trunc i8 %655 to i1
  br i1 %656, label %658, label %657

657:                                              ; preds = %654
  store i32 94, ptr %8, align 4
  br label %703

658:                                              ; preds = %654
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %659 = load ptr, ptr %44, align 8, !tbaa !5
  %660 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr20as_StructConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %659)
          to label %661 unwind label %667

661:                                              ; preds = %658
  store ptr %660, ptr %63, align 8, !tbaa !5
  br label %662

662:                                              ; preds = %697, %661
  %663 = load ptr, ptr %63, align 8, !tbaa !5
  %664 = load i8, ptr %62, align 1, !tbaa !9, !range !11, !noundef !12
  %665 = trunc i8 %664 to i1
  br i1 %665, label %671, label %666

666:                                              ; preds = %662
  store i32 97, ptr %8, align 4
  br label %698

667:                                              ; preds = %671, %658
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %22, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %23, align 4
  br label %700

671:                                              ; preds = %662
  %672 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %65, i32 0, i32 0
  %673 = load ptr, ptr %40, align 8, !tbaa !5
  %674 = getelementptr inbounds %"struct.MIR::Constant::Data_Function", ptr %673, i32 0, i32 0
  %675 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %674) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %672, ptr noundef nonnull align 8 dereferenceable(88) %675)
          to label %676 unwind label %667

676:                                              ; preds = %671
  %677 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %65, i32 0, i32 1
  %678 = load ptr, ptr %63, align 8, !tbaa !5
  %679 = getelementptr inbounds %"struct.StaticTraitResolve::ValuePtr::Data_StructConstructor", ptr %678, i32 0, i32 1
  %680 = load ptr, ptr %679, align 8, !tbaa !63
  invoke void @_ZN3HIR25TypeData_NamedFunction_TyC2EPKNS_6StructE(ptr noundef nonnull align 8 dereferenceable(24) %677, ptr noundef %680)
          to label %681 unwind label %684

681:                                              ; preds = %676
  invoke void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData") align 8 %64, ptr noundef %65)
          to label %682 unwind label %688

682:                                              ; preds = %681
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %64)
          to label %683 unwind label %692

683:                                              ; preds = %682
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %64) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %65) #7
  store i32 1, ptr %8, align 4
  br label %698

684:                                              ; preds = %676
  %685 = landingpad { ptr, i32 }
          cleanup
  %686 = extractvalue { ptr, i32 } %685, 0
  store ptr %686, ptr %22, align 8
  %687 = extractvalue { ptr, i32 } %685, 1
  store i32 %687, ptr %23, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %672) #7
  br label %700

688:                                              ; preds = %681
  %689 = landingpad { ptr, i32 }
          cleanup
  %690 = extractvalue { ptr, i32 } %689, 0
  store ptr %690, ptr %22, align 8
  %691 = extractvalue { ptr, i32 } %689, 1
  store i32 %691, ptr %23, align 4
  br label %696

692:                                              ; preds = %682
  %693 = landingpad { ptr, i32 }
          cleanup
  %694 = extractvalue { ptr, i32 } %693, 0
  store ptr %694, ptr %22, align 8
  %695 = extractvalue { ptr, i32 } %693, 1
  store i32 %695, ptr %23, align 4
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %64) #7
  br label %696

696:                                              ; preds = %692, %688
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %65) #7
  br label %700

697:                                              ; No predecessors!
  store i8 0, ptr %62, align 1, !tbaa !9
  br label %662, !llvm.loop !65

698:                                              ; preds = %683, %666
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  %699 = load i32, ptr %8, align 4
  switch i32 %699, label %703 [
    i32 97, label %701
  ]

700:                                              ; preds = %696, %684, %667
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #7
  br label %710

701:                                              ; preds = %698
  br label %702

702:                                              ; preds = %701
  store i8 0, ptr %62, align 1, !tbaa !9
  br label %654, !llvm.loop !66

703:                                              ; preds = %698, %657
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #7
  %704 = load i32, ptr %8, align 4
  switch i32 %704, label %708 [
    i32 94, label %705
  ]

705:                                              ; preds = %703
  br label %706

706:                                              ; preds = %705, %652, %590, %538, %497
  br label %707

707:                                              ; preds = %706
  store i8 0, ptr %43, align 1, !tbaa !9
  br label %460, !llvm.loop !67

708:                                              ; preds = %703, %650, %588, %463
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  %709 = load i32, ptr %8, align 4
  switch i32 %709, label %713 [
    i32 68, label %711
  ]

710:                                              ; preds = %700, %647, %585, %535, %495, %468
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #7
  br label %720

711:                                              ; preds = %708
  br label %712

712:                                              ; preds = %711
  store i8 0, ptr %43, align 1, !tbaa !9
  br label %451, !llvm.loop !68

713:                                              ; preds = %708, %454
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  %714 = load i32, ptr %8, align 4
  switch i32 %714, label %716 [
    i32 65, label %715
  ]

715:                                              ; preds = %713
  store i32 0, ptr %8, align 4
  br label %716

716:                                              ; preds = %715, %713
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %41) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %41) #7
  %717 = load i32, ptr %8, align 4
  switch i32 %717, label %721 [
    i32 0, label %718
  ]

718:                                              ; preds = %716
  br label %719

719:                                              ; preds = %718
  store i8 0, ptr %39, align 1, !tbaa !9
  br label %437, !llvm.loop !69

720:                                              ; preds = %710, %455
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %41) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #7
  br label %1354

721:                                              ; preds = %716, %441
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  %722 = load i32, ptr %8, align 4
  switch i32 %722, label %725 [
    i32 62, label %723
  ]

723:                                              ; preds = %721
  br label %724

724:                                              ; preds = %723
  store i8 0, ptr %39, align 1, !tbaa !9
  br label %430, !llvm.loop !70

725:                                              ; preds = %721, %433
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #7
  %726 = load i32, ptr %8, align 4
  switch i32 %726, label %1352 [
    i32 59, label %727
  ]

727:                                              ; preds = %725
  br label %1350

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

729:                                              ; preds = %1346, %728
  %730 = load i8, ptr %66, align 1, !tbaa !9, !range !11, !noundef !12
  %731 = trunc i8 %730 to i1
  br i1 %731, label %733, label %732

732:                                              ; preds = %729
  store i32 100, ptr %8, align 4
  br label %1347

733:                                              ; preds = %729
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #7
  %734 = load ptr, ptr %9, align 8, !tbaa !5
  %735 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %734)
  store ptr %735, ptr %67, align 8, !tbaa !5
  br label %736

736:                                              ; preds = %1341, %733
  %737 = load ptr, ptr %67, align 8, !tbaa !5
  %738 = load i8, ptr %66, align 1, !tbaa !9, !range !11, !noundef !12
  %739 = trunc i8 %738 to i1
  br i1 %739, label %741, label %740

740:                                              ; preds = %736
  store i32 103, ptr %8, align 4
  br label %1343

741:                                              ; preds = %736
  call void @llvm.lifetime.start.p0(i64 144, ptr %68) #7
  call void @_ZN14MonomorphStateC2Ev(ptr noundef nonnull align 8 dereferenceable(144) %68)
  call void @llvm.lifetime.start.p0(i64 24, ptr %69) #7
  %742 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %743 = load ptr, ptr %742, align 8, !tbaa !37
  %744 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %745 = load ptr, ptr %744, align 8, !tbaa !43
  %746 = load ptr, ptr %67, align 8, !tbaa !5
  %747 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %746) #7
  invoke void @_ZNK18StaticTraitResolve9get_valueERK4SpanRKN3HIR4PathER14MonomorphStatebPPKNS3_13GenericParamsE(ptr dead_on_unwind writable sret(%"class.StaticTraitResolve::ValuePtr") align 8 %69, ptr noundef nonnull align 8 dereferenceable(424) %743, ptr noundef nonnull align 8 dereferenceable(8) %745, ptr noundef nonnull align 8 dereferenceable(88) %747, ptr noundef nonnull align 8 dereferenceable(144) %68, i1 noundef zeroext true, ptr noundef null)
          to label %748 unwind label %753

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

749:                                              ; preds = %1334, %748
  %750 = load i8, ptr %70, align 1, !tbaa !9, !range !11, !noundef !12
  %751 = trunc i8 %750 to i1
  br i1 %751, label %757, label %752

752:                                              ; preds = %749
  store i32 106, ptr %8, align 4
  br label %1335

753:                                              ; preds = %741
  %754 = landingpad { ptr, i32 }
          cleanup
  %755 = extractvalue { ptr, i32 } %754, 0
  store ptr %755, ptr %22, align 8
  %756 = extractvalue { ptr, i32 } %754, 1
  store i32 %756, ptr %23, align 4
  br label %1342

757:                                              ; preds = %749
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #7
  store ptr %69, ptr %71, align 8, !tbaa !5
  br label %758

758:                                              ; preds = %1329, %757
  %759 = load i8, ptr %70, align 1, !tbaa !9, !range !11, !noundef !12
  %760 = trunc i8 %759 to i1
  br i1 %760, label %762, label %761

761:                                              ; preds = %758
  store i32 109, ptr %8, align 4
  br label %1330

762:                                              ; preds = %758
  %763 = load ptr, ptr %71, align 8, !tbaa !5
  %764 = invoke noundef i32 @_ZNK18StaticTraitResolve8ValuePtr3tagEv(ptr noundef nonnull align 8 dereferenceable(24) %763)
          to label %765 unwind label %766

765:                                              ; preds = %762
  switch i32 %764, label %1328 [
    i32 0, label %770
    i32 1, label %771
    i32 2, label %812
    i32 3, label %851
    i32 4, label %938
    i32 5, label %1025
    i32 7, label %1095
    i32 6, label %1136
    i32 9, label %1216
    i32 8, label %1257
  ]

766:                                              ; preds = %762
  %767 = landingpad { ptr, i32 }
          cleanup
  %768 = extractvalue { ptr, i32 } %767, 0
  store ptr %768, ptr %22, align 8
  %769 = extractvalue { ptr, i32 } %767, 1
  store i32 %769, ptr %23, align 4
  br label %1332

770:                                              ; preds = %765
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 314, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE) #8
  unreachable

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

772:                                              ; preds = %810, %771
  %773 = load i8, ptr %72, align 1, !tbaa !9, !range !11, !noundef !12
  %774 = trunc i8 %773 to i1
  br i1 %774, label %776, label %775

775:                                              ; preds = %772
  store i32 113, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #7
  br label %811

776:                                              ; preds = %772
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #7
  %777 = load ptr, ptr %71, align 8, !tbaa !5
  %778 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN18StaticTraitResolve8ValuePtr11as_NotFoundEv(ptr noundef nonnull align 8 dereferenceable(24) %777)
          to label %779 unwind label %785

779:                                              ; preds = %776
  store ptr %778, ptr %73, align 8, !tbaa !5
  br label %780

780:                                              ; preds = %807, %779
  %781 = load ptr, ptr %73, align 8, !tbaa !5
  %782 = load i8, ptr %72, align 1, !tbaa !9, !range !11, !noundef !12
  %783 = trunc i8 %782 to i1
  br i1 %783, label %789, label %784

784:                                              ; preds = %780
  store i32 116, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  br label %809

785:                                              ; preds = %776
  %786 = landingpad { ptr, i32 }
          cleanup
  %787 = extractvalue { ptr, i32 } %786, 0
  store ptr %787, ptr %22, align 8
  %788 = extractvalue { ptr, i32 } %786, 1
  store i32 %788, ptr %23, align 4
  br label %808

789:                                              ; preds = %780
  br label %790

790:                                              ; preds = %789
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %76) #7
  %791 = getelementptr inbounds %class.anon.397, ptr %76, i32 0, i32 0
  store ptr %74, ptr %791, align 8, !tbaa !5
  %792 = getelementptr inbounds %class.anon.397, ptr %76, i32 0, i32 1
  %793 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %793, ptr %792, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 8 dereferenceable(16) %76) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %122, ptr noundef %75)
          to label %794 unwind label %796

794:                                              ; preds = %790
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #7
  %795 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %795, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %795, ptr @_ZTIPKc, ptr null) #9
          to label %1367 unwind label %800

796:                                              ; preds = %790
  %797 = landingpad { ptr, i32 }
          cleanup
  %798 = extractvalue { ptr, i32 } %797, 0
  store ptr %798, ptr %22, align 8
  %799 = extractvalue { ptr, i32 } %797, 1
  store i32 %799, ptr %23, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #7
  br label %804

800:                                              ; preds = %794
  %801 = landingpad { ptr, i32 }
          cleanup
  %802 = extractvalue { ptr, i32 } %801, 0
  store ptr %802, ptr %22, align 8
  %803 = extractvalue { ptr, i32 } %801, 1
  store i32 %803, ptr %23, align 4
  br label %804

804:                                              ; preds = %800, %796
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  br label %808

805:                                              ; No predecessors!
  br label %806

806:                                              ; preds = %805
  br label %807

807:                                              ; preds = %806
  store i8 0, ptr %72, align 1, !tbaa !9
  br label %780, !llvm.loop !71

808:                                              ; preds = %804, %785
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #7
  br label %1332

809:                                              ; preds = %784
  br label %810

810:                                              ; preds = %809
  store i8 0, ptr %72, align 1, !tbaa !9
  br label %772, !llvm.loop !72

811:                                              ; preds = %775
  br label %1328

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

813:                                              ; preds = %849, %812
  %814 = load i8, ptr %77, align 1, !tbaa !9, !range !11, !noundef !12
  %815 = trunc i8 %814 to i1
  br i1 %815, label %817, label %816

816:                                              ; preds = %813
  store i32 121, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #7
  br label %850

817:                                              ; preds = %813
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #7
  %818 = load ptr, ptr %71, align 8, !tbaa !5
  %819 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN18StaticTraitResolve8ValuePtr14as_NotYetKnownEv(ptr noundef nonnull align 8 dereferenceable(24) %818)
          to label %820 unwind label %826

820:                                              ; preds = %817
  store ptr %819, ptr %78, align 8, !tbaa !5
  br label %821

821:                                              ; preds = %846, %820
  %822 = load ptr, ptr %78, align 8, !tbaa !5
  %823 = load i8, ptr %77, align 1, !tbaa !9, !range !11, !noundef !12
  %824 = trunc i8 %823 to i1
  br i1 %824, label %830, label %825

825:                                              ; preds = %821
  store i32 124, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #7
  br label %848

826:                                              ; preds = %817
  %827 = landingpad { ptr, i32 }
          cleanup
  %828 = extractvalue { ptr, i32 } %827, 0
  store ptr %828, ptr %22, align 8
  %829 = extractvalue { ptr, i32 } %827, 1
  store i32 %829, ptr %23, align 4
  br label %847

830:                                              ; preds = %821
  br label %831

831:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  %832 = getelementptr inbounds %class.anon.398, ptr %81, i32 0, i32 0
  store ptr %79, ptr %832, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 8 dereferenceable(8) %81) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %122, ptr noundef %80)
          to label %833 unwind label %835

833:                                              ; preds = %831
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  %834 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %834, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %834, ptr @_ZTIPKc, ptr null) #9
          to label %1367 unwind label %839

835:                                              ; preds = %831
  %836 = landingpad { ptr, i32 }
          cleanup
  %837 = extractvalue { ptr, i32 } %836, 0
  store ptr %837, ptr %22, align 8
  %838 = extractvalue { ptr, i32 } %836, 1
  store i32 %838, ptr %23, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  br label %843

839:                                              ; preds = %833
  %840 = landingpad { ptr, i32 }
          cleanup
  %841 = extractvalue { ptr, i32 } %840, 0
  store ptr %841, ptr %22, align 8
  %842 = extractvalue { ptr, i32 } %840, 1
  store i32 %842, ptr %23, align 4
  br label %843

843:                                              ; preds = %839, %835
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  br label %847

844:                                              ; No predecessors!
  br label %845

845:                                              ; preds = %844
  br label %846

846:                                              ; preds = %845
  store i8 0, ptr %77, align 1, !tbaa !9
  br label %821, !llvm.loop !73

847:                                              ; preds = %843, %826
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #7
  br label %1332

848:                                              ; preds = %825
  br label %849

849:                                              ; preds = %848
  store i8 0, ptr %77, align 1, !tbaa !9
  br label %813, !llvm.loop !74

850:                                              ; preds = %816
  br label %1328

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

852:                                              ; preds = %934, %851
  %853 = load i8, ptr %82, align 1, !tbaa !9, !range !11, !noundef !12
  %854 = trunc i8 %853 to i1
  br i1 %854, label %856, label %855

855:                                              ; preds = %852
  store i32 129, ptr %8, align 4
  br label %935

856:                                              ; preds = %852
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #7
  %857 = load ptr, ptr %71, align 8, !tbaa !5
  %858 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN18StaticTraitResolve8ValuePtr11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(24) %857)
          to label %859 unwind label %865

859:                                              ; preds = %856
  store ptr %858, ptr %83, align 8, !tbaa !5
  br label %860

860:                                              ; preds = %929, %859
  %861 = load ptr, ptr %83, align 8, !tbaa !5
  %862 = load i8, ptr %82, align 1, !tbaa !9, !range !11, !noundef !12
  %863 = trunc i8 %862 to i1
  br i1 %863, label %869, label %864

864:                                              ; preds = %860
  store i32 132, ptr %8, align 4
  br label %930

865:                                              ; preds = %856
  %866 = landingpad { ptr, i32 }
          cleanup
  %867 = extractvalue { ptr, i32 } %866, 0
  store ptr %867, ptr %22, align 8
  %868 = extractvalue { ptr, i32 } %866, 1
  store i32 %868, ptr %23, align 4
  br label %932

869:                                              ; preds = %860
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #7
  %870 = load ptr, ptr %83, align 8, !tbaa !5
  %871 = load ptr, ptr %870, align 8, !tbaa !5
  %872 = getelementptr inbounds %"class.HIR::Constant", ptr %871, i32 0, i32 1
  store ptr %872, ptr %84, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #7
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85)
          to label %873 unwind label %889

873:                                              ; preds = %869
  %874 = load ptr, ptr %84, align 8, !tbaa !5
  %875 = invoke noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8) %874, i1 noundef zeroext false)
          to label %876 unwind label %893

876:                                              ; preds = %873
  br i1 %875, label %877, label %906

877:                                              ; preds = %876
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #7
  %878 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %879 = load ptr, ptr %878, align 8, !tbaa !43
  %880 = load ptr, ptr %84, align 8, !tbaa !5
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %86, ptr noundef nonnull align 8 dereferenceable(96) %68, ptr noundef nonnull align 8 dereferenceable(8) %879, ptr noundef nonnull align 8 dereferenceable(8) %880, i1 noundef zeroext true)
          to label %881 unwind label %897

881:                                              ; preds = %877
  %882 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %85, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %883 unwind label %901

883:                                              ; preds = %881
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %86) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #7
  %884 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %885 = load ptr, ptr %884, align 8, !tbaa !37
  %886 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %887 = load ptr, ptr %886, align 8, !tbaa !43
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %885, ptr noundef nonnull align 8 dereferenceable(8) %887, ptr noundef nonnull align 8 dereferenceable(8) %85)
          to label %888 unwind label %893

888:                                              ; preds = %883
  br label %920

889:                                              ; preds = %869
  %890 = landingpad { ptr, i32 }
          cleanup
  %891 = extractvalue { ptr, i32 } %890, 0
  store ptr %891, ptr %22, align 8
  %892 = extractvalue { ptr, i32 } %890, 1
  store i32 %892, ptr %23, align 4
  br label %928

893:                                              ; preds = %920, %883, %873
  %894 = landingpad { ptr, i32 }
          cleanup
  %895 = extractvalue { ptr, i32 } %894, 0
  store ptr %895, ptr %22, align 8
  %896 = extractvalue { ptr, i32 } %894, 1
  store i32 %896, ptr %23, align 4
  br label %927

897:                                              ; preds = %877
  %898 = landingpad { ptr, i32 }
          cleanup
  %899 = extractvalue { ptr, i32 } %898, 0
  store ptr %899, ptr %22, align 8
  %900 = extractvalue { ptr, i32 } %898, 1
  store i32 %900, ptr %23, align 4
  br label %905

901:                                              ; preds = %881
  %902 = landingpad { ptr, i32 }
          cleanup
  %903 = extractvalue { ptr, i32 } %902, 0
  store ptr %903, ptr %22, align 8
  %904 = extractvalue { ptr, i32 } %902, 1
  store i32 %904, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %86) #7
  br label %905

905:                                              ; preds = %901, %897
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #7
  br label %927

906:                                              ; preds = %876
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #7
  %907 = load ptr, ptr %84, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %87, ptr noundef nonnull align 8 dereferenceable(8) %907)
          to label %908 unwind label %911

908:                                              ; preds = %906
  %909 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %85, ptr noundef nonnull align 8 dereferenceable(8) %87)
          to label %910 unwind label %915

910:                                              ; preds = %908
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %87) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  br label %920

911:                                              ; preds = %906
  %912 = landingpad { ptr, i32 }
          cleanup
  %913 = extractvalue { ptr, i32 } %912, 0
  store ptr %913, ptr %22, align 8
  %914 = extractvalue { ptr, i32 } %912, 1
  store i32 %914, ptr %23, align 4
  br label %919

915:                                              ; preds = %908
  %916 = landingpad { ptr, i32 }
          cleanup
  %917 = extractvalue { ptr, i32 } %916, 0
  store ptr %917, ptr %22, align 8
  %918 = extractvalue { ptr, i32 } %916, 1
  store i32 %918, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %87) #7
  br label %919

919:                                              ; preds = %915, %911
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  br label %927

920:                                              ; preds = %910, %888
  invoke void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef nonnull align 8 dereferenceable(8) %85)
          to label %921 unwind label %893

921:                                              ; preds = %920
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef 0, ptr noundef %88)
          to label %922 unwind label %923

922:                                              ; preds = %921
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %88) #7
  store i32 1, ptr %8, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  br label %930

923:                                              ; preds = %921
  %924 = landingpad { ptr, i32 }
          cleanup
  %925 = extractvalue { ptr, i32 } %924, 0
  store ptr %925, ptr %22, align 8
  %926 = extractvalue { ptr, i32 } %924, 1
  store i32 %926, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %88) #7
  br label %927

927:                                              ; preds = %923, %919, %905, %893
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #7
  br label %928

928:                                              ; preds = %927, %889
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  br label %932

929:                                              ; No predecessors!
  store i8 0, ptr %82, align 1, !tbaa !9
  br label %860, !llvm.loop !75

930:                                              ; preds = %922, %864
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  %931 = load i32, ptr %8, align 4
  switch i32 %931, label %935 [
    i32 132, label %933
  ]

932:                                              ; preds = %928, %865
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %82) #7
  br label %1332

933:                                              ; preds = %930
  br label %934

934:                                              ; preds = %933
  store i8 0, ptr %82, align 1, !tbaa !9
  br label %852, !llvm.loop !76

935:                                              ; preds = %930, %855
  call void @llvm.lifetime.end.p0(i64 1, ptr %82) #7
  %936 = load i32, ptr %8, align 4
  switch i32 %936, label %1330 [
    i32 129, label %937
  ]

937:                                              ; preds = %935
  br label %1328

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

939:                                              ; preds = %1021, %938
  %940 = load i8, ptr %89, align 1, !tbaa !9, !range !11, !noundef !12
  %941 = trunc i8 %940 to i1
  br i1 %941, label %943, label %942

942:                                              ; preds = %939
  store i32 135, ptr %8, align 4
  br label %1022

943:                                              ; preds = %939
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #7
  %944 = load ptr, ptr %71, align 8, !tbaa !5
  %945 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN18StaticTraitResolve8ValuePtr9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(24) %944)
          to label %946 unwind label %952

946:                                              ; preds = %943
  store ptr %945, ptr %90, align 8, !tbaa !5
  br label %947

947:                                              ; preds = %1016, %946
  %948 = load ptr, ptr %90, align 8, !tbaa !5
  %949 = load i8, ptr %89, align 1, !tbaa !9, !range !11, !noundef !12
  %950 = trunc i8 %949 to i1
  br i1 %950, label %956, label %951

951:                                              ; preds = %947
  store i32 138, ptr %8, align 4
  br label %1017

952:                                              ; preds = %943
  %953 = landingpad { ptr, i32 }
          cleanup
  %954 = extractvalue { ptr, i32 } %953, 0
  store ptr %954, ptr %22, align 8
  %955 = extractvalue { ptr, i32 } %953, 1
  store i32 %955, ptr %23, align 4
  br label %1019

956:                                              ; preds = %947
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #7
  %957 = load ptr, ptr %90, align 8, !tbaa !5
  %958 = load ptr, ptr %957, align 8, !tbaa !5
  %959 = getelementptr inbounds %"class.HIR::Static", ptr %958, i32 0, i32 3
  store ptr %959, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #7
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %960 unwind label %976

960:                                              ; preds = %956
  %961 = load ptr, ptr %91, align 8, !tbaa !5
  %962 = invoke noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8) %961, i1 noundef zeroext false)
          to label %963 unwind label %980

963:                                              ; preds = %960
  br i1 %962, label %964, label %993

964:                                              ; preds = %963
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #7
  %965 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %966 = load ptr, ptr %965, align 8, !tbaa !43
  %967 = load ptr, ptr %91, align 8, !tbaa !5
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %93, ptr noundef nonnull align 8 dereferenceable(96) %68, ptr noundef nonnull align 8 dereferenceable(8) %966, ptr noundef nonnull align 8 dereferenceable(8) %967, i1 noundef zeroext true)
          to label %968 unwind label %984

968:                                              ; preds = %964
  %969 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull align 8 dereferenceable(8) %93)
          to label %970 unwind label %988

970:                                              ; preds = %968
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %93) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #7
  %971 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %972 = load ptr, ptr %971, align 8, !tbaa !37
  %973 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %974 = load ptr, ptr %973, align 8, !tbaa !43
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %972, ptr noundef nonnull align 8 dereferenceable(8) %974, ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %975 unwind label %980

975:                                              ; preds = %970
  br label %1007

976:                                              ; preds = %956
  %977 = landingpad { ptr, i32 }
          cleanup
  %978 = extractvalue { ptr, i32 } %977, 0
  store ptr %978, ptr %22, align 8
  %979 = extractvalue { ptr, i32 } %977, 1
  store i32 %979, ptr %23, align 4
  br label %1015

980:                                              ; preds = %1007, %970, %960
  %981 = landingpad { ptr, i32 }
          cleanup
  %982 = extractvalue { ptr, i32 } %981, 0
  store ptr %982, ptr %22, align 8
  %983 = extractvalue { ptr, i32 } %981, 1
  store i32 %983, ptr %23, align 4
  br label %1014

984:                                              ; preds = %964
  %985 = landingpad { ptr, i32 }
          cleanup
  %986 = extractvalue { ptr, i32 } %985, 0
  store ptr %986, ptr %22, align 8
  %987 = extractvalue { ptr, i32 } %985, 1
  store i32 %987, ptr %23, align 4
  br label %992

988:                                              ; preds = %968
  %989 = landingpad { ptr, i32 }
          cleanup
  %990 = extractvalue { ptr, i32 } %989, 0
  store ptr %990, ptr %22, align 8
  %991 = extractvalue { ptr, i32 } %989, 1
  store i32 %991, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %93) #7
  br label %992

992:                                              ; preds = %988, %984
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #7
  br label %1014

993:                                              ; preds = %963
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #7
  %994 = load ptr, ptr %91, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %94, ptr noundef nonnull align 8 dereferenceable(8) %994)
          to label %995 unwind label %998

995:                                              ; preds = %993
  %996 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull align 8 dereferenceable(8) %94)
          to label %997 unwind label %1002

997:                                              ; preds = %995
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %94) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #7
  br label %1007

998:                                              ; preds = %993
  %999 = landingpad { ptr, i32 }
          cleanup
  %1000 = extractvalue { ptr, i32 } %999, 0
  store ptr %1000, ptr %22, align 8
  %1001 = extractvalue { ptr, i32 } %999, 1
  store i32 %1001, ptr %23, align 4
  br label %1006

1002:                                             ; preds = %995
  %1003 = landingpad { ptr, i32 }
          cleanup
  %1004 = extractvalue { ptr, i32 } %1003, 0
  store ptr %1004, ptr %22, align 8
  %1005 = extractvalue { ptr, i32 } %1003, 1
  store i32 %1005, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %94) #7
  br label %1006

1006:                                             ; preds = %1002, %998
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #7
  br label %1014

1007:                                             ; preds = %997, %975
  invoke void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %95, ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %1008 unwind label %980

1008:                                             ; preds = %1007
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef 0, ptr noundef %95)
          to label %1009 unwind label %1010

1009:                                             ; preds = %1008
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %95) #7
  store i32 1, ptr %8, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %92) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  br label %1017

1010:                                             ; preds = %1008
  %1011 = landingpad { ptr, i32 }
          cleanup
  %1012 = extractvalue { ptr, i32 } %1011, 0
  store ptr %1012, ptr %22, align 8
  %1013 = extractvalue { ptr, i32 } %1011, 1
  store i32 %1013, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %95) #7
  br label %1014

1014:                                             ; preds = %1010, %1006, %992, %980
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %92) #7
  br label %1015

1015:                                             ; preds = %1014, %976
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  br label %1019

1016:                                             ; No predecessors!
  store i8 0, ptr %89, align 1, !tbaa !9
  br label %947, !llvm.loop !77

1017:                                             ; preds = %1009, %951
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #7
  %1018 = load i32, ptr %8, align 4
  switch i32 %1018, label %1022 [
    i32 138, label %1020
  ]

1019:                                             ; preds = %1015, %952
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #7
  br label %1332

1020:                                             ; preds = %1017
  br label %1021

1021:                                             ; preds = %1020
  store i8 0, ptr %89, align 1, !tbaa !9
  br label %939, !llvm.loop !78

1022:                                             ; preds = %1017, %942
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #7
  %1023 = load i32, ptr %8, align 4
  switch i32 %1023, label %1330 [
    i32 135, label %1024
  ]

1024:                                             ; preds = %1022
  br label %1328

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

1026:                                             ; preds = %1091, %1025
  %1027 = load i8, ptr %96, align 1, !tbaa !9, !range !11, !noundef !12
  %1028 = trunc i8 %1027 to i1
  br i1 %1028, label %1030, label %1029

1029:                                             ; preds = %1026
  store i32 141, ptr %8, align 4
  br label %1092

1030:                                             ; preds = %1026
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #7
  %1031 = load ptr, ptr %71, align 8, !tbaa !5
  %1032 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN18StaticTraitResolve8ValuePtr11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(24) %1031)
          to label %1033 unwind label %1039

1033:                                             ; preds = %1030
  store ptr %1032, ptr %97, align 8, !tbaa !5
  br label %1034

1034:                                             ; preds = %1086, %1033
  %1035 = load ptr, ptr %97, align 8, !tbaa !5
  %1036 = load i8, ptr %96, align 1, !tbaa !9, !range !11, !noundef !12
  %1037 = trunc i8 %1036 to i1
  br i1 %1037, label %1043, label %1038

1038:                                             ; preds = %1034
  store i32 144, ptr %8, align 4
  br label %1087

1039:                                             ; preds = %1030
  %1040 = landingpad { ptr, i32 }
          cleanup
  %1041 = extractvalue { ptr, i32 } %1040, 0
  store ptr %1041, ptr %22, align 8
  %1042 = extractvalue { ptr, i32 } %1040, 1
  store i32 %1042, ptr %23, align 4
  br label %1089

1043:                                             ; preds = %1034
  store i1 false, ptr %98, align 1
  call void @llvm.lifetime.start.p0(i64 112, ptr %100) #7
  %1044 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %100, i32 0, i32 0
  %1045 = load ptr, ptr %67, align 8, !tbaa !5
  %1046 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1045) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %1044, ptr noundef nonnull align 8 dereferenceable(88) %1046)
          to label %1047 unwind label %1062

1047:                                             ; preds = %1043
  %1048 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %100, i32 0, i32 1
  %1049 = load ptr, ptr %97, align 8, !tbaa !5
  %1050 = load ptr, ptr %1049, align 8, !tbaa !5
  invoke void @_ZN3HIR25TypeData_NamedFunction_TyC2EPKNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(24) %1048, ptr noundef %1050)
          to label %1051 unwind label %1066

1051:                                             ; preds = %1047
  %1052 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %1053 = load ptr, ptr %1052, align 8, !tbaa !43
  invoke void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8 %99, ptr noundef nonnull align 8 dereferenceable(112) %100, ptr noundef nonnull align 8 dereferenceable(8) %1053)
          to label %1054 unwind label %1070

1054:                                             ; preds = %1051
  invoke void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %99)
          to label %1055 unwind label %1074

1055:                                             ; preds = %1054
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %99) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %100) #7
  call void @llvm.lifetime.end.p0(i64 112, ptr %100) #7
  %1056 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %1057 = load ptr, ptr %1056, align 8, !tbaa !37
  %1058 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %1059 = load ptr, ptr %1058, align 8, !tbaa !43
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %1057, ptr noundef nonnull align 8 dereferenceable(8) %1059, ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %1060 unwind label %1080

1060:                                             ; preds = %1055
  store i1 true, ptr %98, align 1
  store i32 1, ptr %8, align 4
  %1061 = load i1, ptr %98, align 1
  br i1 %1061, label %1085, label %1084

1062:                                             ; preds = %1043
  %1063 = landingpad { ptr, i32 }
          cleanup
  %1064 = extractvalue { ptr, i32 } %1063, 0
  store ptr %1064, ptr %22, align 8
  %1065 = extractvalue { ptr, i32 } %1063, 1
  store i32 %1065, ptr %23, align 4
  br label %1079

1066:                                             ; preds = %1047
  %1067 = landingpad { ptr, i32 }
          cleanup
  %1068 = extractvalue { ptr, i32 } %1067, 0
  store ptr %1068, ptr %22, align 8
  %1069 = extractvalue { ptr, i32 } %1067, 1
  store i32 %1069, ptr %23, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %1044) #7
  br label %1079

1070:                                             ; preds = %1051
  %1071 = landingpad { ptr, i32 }
          cleanup
  %1072 = extractvalue { ptr, i32 } %1071, 0
  store ptr %1072, ptr %22, align 8
  %1073 = extractvalue { ptr, i32 } %1071, 1
  store i32 %1073, ptr %23, align 4
  br label %1078

1074:                                             ; preds = %1054
  %1075 = landingpad { ptr, i32 }
          cleanup
  %1076 = extractvalue { ptr, i32 } %1075, 0
  store ptr %1076, ptr %22, align 8
  %1077 = extractvalue { ptr, i32 } %1075, 1
  store i32 %1077, ptr %23, align 4
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %99) #7
  br label %1078

1078:                                             ; preds = %1074, %1070
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %100) #7
  br label %1079

1079:                                             ; preds = %1078, %1066, %1062
  call void @llvm.lifetime.end.p0(i64 112, ptr %100) #7
  br label %1089

1080:                                             ; preds = %1055
  %1081 = landingpad { ptr, i32 }
          cleanup
  %1082 = extractvalue { ptr, i32 } %1081, 0
  store ptr %1082, ptr %22, align 8
  %1083 = extractvalue { ptr, i32 } %1081, 1
  store i32 %1083, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %1089

1084:                                             ; preds = %1060
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %1085

1085:                                             ; preds = %1084, %1060
  br label %1087

1086:                                             ; No predecessors!
  store i8 0, ptr %96, align 1, !tbaa !9
  br label %1034, !llvm.loop !79

1087:                                             ; preds = %1085, %1038
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #7
  %1088 = load i32, ptr %8, align 4
  switch i32 %1088, label %1092 [
    i32 144, label %1090
  ]

1089:                                             ; preds = %1080, %1079, %1039
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #7
  br label %1332

1090:                                             ; preds = %1087
  br label %1091

1091:                                             ; preds = %1090
  store i8 0, ptr %96, align 1, !tbaa !9
  br label %1026, !llvm.loop !80

1092:                                             ; preds = %1087, %1029
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #7
  %1093 = load i32, ptr %8, align 4
  switch i32 %1093, label %1330 [
    i32 141, label %1094
  ]

1094:                                             ; preds = %1092
  br label %1328

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

1096:                                             ; preds = %1134, %1095
  %1097 = load i8, ptr %101, align 1, !tbaa !9, !range !11, !noundef !12
  %1098 = trunc i8 %1097 to i1
  br i1 %1098, label %1100, label %1099

1099:                                             ; preds = %1096
  store i32 147, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %101) #7
  br label %1135

1100:                                             ; preds = %1096
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #7
  %1101 = load ptr, ptr %71, align 8, !tbaa !5
  %1102 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr12as_EnumValueEv(ptr noundef nonnull align 8 dereferenceable(24) %1101)
          to label %1103 unwind label %1109

1103:                                             ; preds = %1100
  store ptr %1102, ptr %102, align 8, !tbaa !5
  br label %1104

1104:                                             ; preds = %1131, %1103
  %1105 = load ptr, ptr %102, align 8, !tbaa !5
  %1106 = load i8, ptr %101, align 1, !tbaa !9, !range !11, !noundef !12
  %1107 = trunc i8 %1106 to i1
  br i1 %1107, label %1113, label %1108

1108:                                             ; preds = %1104
  store i32 150, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #7
  br label %1133

1109:                                             ; preds = %1100
  %1110 = landingpad { ptr, i32 }
          cleanup
  %1111 = extractvalue { ptr, i32 } %1110, 0
  store ptr %1111, ptr %22, align 8
  %1112 = extractvalue { ptr, i32 } %1110, 1
  store i32 %1112, ptr %23, align 4
  br label %1132

1113:                                             ; preds = %1104
  br label %1114

1114:                                             ; preds = %1113
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %103, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %105) #7
  %1115 = getelementptr inbounds %class.anon.399, ptr %105, i32 0, i32 0
  store ptr %103, ptr %1115, align 8, !tbaa !5
  %1116 = getelementptr inbounds %class.anon.399, ptr %105, i32 0, i32 1
  %1117 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %1117, ptr %1116, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef nonnull align 8 dereferenceable(16) %105) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %122, ptr noundef %104)
          to label %1118 unwind label %1120

1118:                                             ; preds = %1114
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %105) #7
  %1119 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %1119, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %1119, ptr @_ZTIPKc, ptr null) #9
          to label %1367 unwind label %1124

1120:                                             ; preds = %1114
  %1121 = landingpad { ptr, i32 }
          cleanup
  %1122 = extractvalue { ptr, i32 } %1121, 0
  store ptr %1122, ptr %22, align 8
  %1123 = extractvalue { ptr, i32 } %1121, 1
  store i32 %1123, ptr %23, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %105) #7
  br label %1128

1124:                                             ; preds = %1118
  %1125 = landingpad { ptr, i32 }
          cleanup
  %1126 = extractvalue { ptr, i32 } %1125, 0
  store ptr %1126, ptr %22, align 8
  %1127 = extractvalue { ptr, i32 } %1125, 1
  store i32 %1127, ptr %23, align 4
  br label %1128

1128:                                             ; preds = %1124, %1120
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #7
  br label %1132

1129:                                             ; No predecessors!
  br label %1130

1130:                                             ; preds = %1129
  br label %1131

1131:                                             ; preds = %1130
  store i8 0, ptr %101, align 1, !tbaa !9
  br label %1104, !llvm.loop !81

1132:                                             ; preds = %1128, %1109
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %101) #7
  br label %1332

1133:                                             ; preds = %1108
  br label %1134

1134:                                             ; preds = %1133
  store i8 0, ptr %101, align 1, !tbaa !9
  br label %1096, !llvm.loop !82

1135:                                             ; preds = %1099
  br label %1328

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

1137:                                             ; preds = %1212, %1136
  %1138 = load i8, ptr %106, align 1, !tbaa !9, !range !11, !noundef !12
  %1139 = trunc i8 %1138 to i1
  br i1 %1139, label %1141, label %1140

1140:                                             ; preds = %1137
  store i32 155, ptr %8, align 4
  br label %1213

1141:                                             ; preds = %1137
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #7
  %1142 = load ptr, ptr %71, align 8, !tbaa !5
  %1143 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr18as_EnumConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %1142)
          to label %1144 unwind label %1150

1144:                                             ; preds = %1141
  store ptr %1143, ptr %107, align 8, !tbaa !5
  br label %1145

1145:                                             ; preds = %1207, %1144
  %1146 = load ptr, ptr %107, align 8, !tbaa !5
  %1147 = load i8, ptr %106, align 1, !tbaa !9, !range !11, !noundef !12
  %1148 = trunc i8 %1147 to i1
  br i1 %1148, label %1154, label %1149

1149:                                             ; preds = %1145
  store i32 158, ptr %8, align 4
  br label %1208

1150:                                             ; preds = %1141
  %1151 = landingpad { ptr, i32 }
          cleanup
  %1152 = extractvalue { ptr, i32 } %1151, 0
  store ptr %1152, ptr %22, align 8
  %1153 = extractvalue { ptr, i32 } %1151, 1
  store i32 %1153, ptr %23, align 4
  br label %1210

1154:                                             ; preds = %1145
  store i1 false, ptr %108, align 1
  call void @llvm.lifetime.start.p0(i64 112, ptr %110) #7
  %1155 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %110, i32 0, i32 0
  %1156 = load ptr, ptr %67, align 8, !tbaa !5
  %1157 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1156) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %1155, ptr noundef nonnull align 8 dereferenceable(88) %1157)
          to label %1158 unwind label %1183

1158:                                             ; preds = %1154
  %1159 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %110, i32 0, i32 1
  %1160 = getelementptr inbounds %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor", ptr %111, i32 0, i32 0
  %1161 = load ptr, ptr %107, align 8, !tbaa !5
  %1162 = getelementptr inbounds %"struct.StaticTraitResolve::ValuePtr::Data_EnumConstructor", ptr %1161, i32 0, i32 0
  %1163 = load ptr, ptr %1162, align 8, !tbaa !55
  store ptr %1163, ptr %1160, align 8, !tbaa !57
  %1164 = getelementptr inbounds %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor", ptr %111, i32 0, i32 1
  %1165 = load ptr, ptr %107, align 8, !tbaa !5
  %1166 = getelementptr inbounds %"struct.StaticTraitResolve::ValuePtr::Data_EnumConstructor", ptr %1165, i32 0, i32 1
  %1167 = load i64, ptr %1166, align 8, !tbaa !59
  store i64 %1167, ptr %1164, align 8, !tbaa !60
  %1168 = getelementptr inbounds { ptr, i64 }, ptr %111, i32 0, i32 0
  %1169 = load ptr, ptr %1168, align 8
  %1170 = getelementptr inbounds { ptr, i64 }, ptr %111, i32 0, i32 1
  %1171 = load i64, ptr %1170, align 8
  invoke void @_ZN3HIR25TypeData_NamedFunction_Ty20make_EnumConstructorENS0_20Data_EnumConstructorE(ptr dead_on_unwind writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8 %1159, ptr %1169, i64 %1171)
          to label %1172 unwind label %1187

1172:                                             ; preds = %1158
  %1173 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %1174 = load ptr, ptr %1173, align 8, !tbaa !43
  invoke void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8 %109, ptr noundef nonnull align 8 dereferenceable(112) %110, ptr noundef nonnull align 8 dereferenceable(8) %1174)
          to label %1175 unwind label %1191

1175:                                             ; preds = %1172
  invoke void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %109)
          to label %1176 unwind label %1195

1176:                                             ; preds = %1175
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %109) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %110) #7
  call void @llvm.lifetime.end.p0(i64 112, ptr %110) #7
  %1177 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %1178 = load ptr, ptr %1177, align 8, !tbaa !37
  %1179 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %1180 = load ptr, ptr %1179, align 8, !tbaa !43
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %1178, ptr noundef nonnull align 8 dereferenceable(8) %1180, ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %1181 unwind label %1201

1181:                                             ; preds = %1176
  store i1 true, ptr %108, align 1
  store i32 1, ptr %8, align 4
  %1182 = load i1, ptr %108, align 1
  br i1 %1182, label %1206, label %1205

1183:                                             ; preds = %1154
  %1184 = landingpad { ptr, i32 }
          cleanup
  %1185 = extractvalue { ptr, i32 } %1184, 0
  store ptr %1185, ptr %22, align 8
  %1186 = extractvalue { ptr, i32 } %1184, 1
  store i32 %1186, ptr %23, align 4
  br label %1200

1187:                                             ; preds = %1158
  %1188 = landingpad { ptr, i32 }
          cleanup
  %1189 = extractvalue { ptr, i32 } %1188, 0
  store ptr %1189, ptr %22, align 8
  %1190 = extractvalue { ptr, i32 } %1188, 1
  store i32 %1190, ptr %23, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %1155) #7
  br label %1200

1191:                                             ; preds = %1172
  %1192 = landingpad { ptr, i32 }
          cleanup
  %1193 = extractvalue { ptr, i32 } %1192, 0
  store ptr %1193, ptr %22, align 8
  %1194 = extractvalue { ptr, i32 } %1192, 1
  store i32 %1194, ptr %23, align 4
  br label %1199

1195:                                             ; preds = %1175
  %1196 = landingpad { ptr, i32 }
          cleanup
  %1197 = extractvalue { ptr, i32 } %1196, 0
  store ptr %1197, ptr %22, align 8
  %1198 = extractvalue { ptr, i32 } %1196, 1
  store i32 %1198, ptr %23, align 4
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %109) #7
  br label %1199

1199:                                             ; preds = %1195, %1191
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %110) #7
  br label %1200

1200:                                             ; preds = %1199, %1187, %1183
  call void @llvm.lifetime.end.p0(i64 112, ptr %110) #7
  br label %1210

1201:                                             ; preds = %1176
  %1202 = landingpad { ptr, i32 }
          cleanup
  %1203 = extractvalue { ptr, i32 } %1202, 0
  store ptr %1203, ptr %22, align 8
  %1204 = extractvalue { ptr, i32 } %1202, 1
  store i32 %1204, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %1210

1205:                                             ; preds = %1181
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %1206

1206:                                             ; preds = %1205, %1181
  br label %1208

1207:                                             ; No predecessors!
  store i8 0, ptr %106, align 1, !tbaa !9
  br label %1145, !llvm.loop !83

1208:                                             ; preds = %1206, %1149
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #7
  %1209 = load i32, ptr %8, align 4
  switch i32 %1209, label %1213 [
    i32 158, label %1211
  ]

1210:                                             ; preds = %1201, %1200, %1150
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %106) #7
  br label %1332

1211:                                             ; preds = %1208
  br label %1212

1212:                                             ; preds = %1211
  store i8 0, ptr %106, align 1, !tbaa !9
  br label %1137, !llvm.loop !84

1213:                                             ; preds = %1208, %1140
  call void @llvm.lifetime.end.p0(i64 1, ptr %106) #7
  %1214 = load i32, ptr %8, align 4
  switch i32 %1214, label %1330 [
    i32 155, label %1215
  ]

1215:                                             ; preds = %1213
  br label %1328

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

1217:                                             ; preds = %1255, %1216
  %1218 = load i8, ptr %112, align 1, !tbaa !9, !range !11, !noundef !12
  %1219 = trunc i8 %1218 to i1
  br i1 %1219, label %1221, label %1220

1220:                                             ; preds = %1217
  store i32 161, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %112) #7
  br label %1256

1221:                                             ; preds = %1217
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #7
  %1222 = load ptr, ptr %71, align 8, !tbaa !5
  %1223 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr17as_StructConstantEv(ptr noundef nonnull align 8 dereferenceable(24) %1222)
          to label %1224 unwind label %1230

1224:                                             ; preds = %1221
  store ptr %1223, ptr %113, align 8, !tbaa !5
  br label %1225

1225:                                             ; preds = %1252, %1224
  %1226 = load ptr, ptr %113, align 8, !tbaa !5
  %1227 = load i8, ptr %112, align 1, !tbaa !9, !range !11, !noundef !12
  %1228 = trunc i8 %1227 to i1
  br i1 %1228, label %1234, label %1229

1229:                                             ; preds = %1225
  store i32 164, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #7
  br label %1254

1230:                                             ; preds = %1221
  %1231 = landingpad { ptr, i32 }
          cleanup
  %1232 = extractvalue { ptr, i32 } %1231, 0
  store ptr %1232, ptr %22, align 8
  %1233 = extractvalue { ptr, i32 } %1231, 1
  store i32 %1233, ptr %23, align 4
  br label %1253

1234:                                             ; preds = %1225
  br label %1235

1235:                                             ; preds = %1234
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %114, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %116) #7
  %1236 = getelementptr inbounds %class.anon.400, ptr %116, i32 0, i32 0
  store ptr %114, ptr %1236, align 8, !tbaa !5
  %1237 = getelementptr inbounds %class.anon.400, ptr %116, i32 0, i32 1
  %1238 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %1238, ptr %1237, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 8 dereferenceable(16) %116) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %122, ptr noundef %115)
          to label %1239 unwind label %1241

1239:                                             ; preds = %1235
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %116) #7
  %1240 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %1240, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %1240, ptr @_ZTIPKc, ptr null) #9
          to label %1367 unwind label %1245

1241:                                             ; preds = %1235
  %1242 = landingpad { ptr, i32 }
          cleanup
  %1243 = extractvalue { ptr, i32 } %1242, 0
  store ptr %1243, ptr %22, align 8
  %1244 = extractvalue { ptr, i32 } %1242, 1
  store i32 %1244, ptr %23, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %116) #7
  br label %1249

1245:                                             ; preds = %1239
  %1246 = landingpad { ptr, i32 }
          cleanup
  %1247 = extractvalue { ptr, i32 } %1246, 0
  store ptr %1247, ptr %22, align 8
  %1248 = extractvalue { ptr, i32 } %1246, 1
  store i32 %1248, ptr %23, align 4
  br label %1249

1249:                                             ; preds = %1245, %1241
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #7
  br label %1253

1250:                                             ; No predecessors!
  br label %1251

1251:                                             ; preds = %1250
  br label %1252

1252:                                             ; preds = %1251
  store i8 0, ptr %112, align 1, !tbaa !9
  br label %1225, !llvm.loop !85

1253:                                             ; preds = %1249, %1230
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %112) #7
  br label %1332

1254:                                             ; preds = %1229
  br label %1255

1255:                                             ; preds = %1254
  store i8 0, ptr %112, align 1, !tbaa !9
  br label %1217, !llvm.loop !86

1256:                                             ; preds = %1220
  br label %1328

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

1258:                                             ; preds = %1324, %1257
  %1259 = load i8, ptr %117, align 1, !tbaa !9, !range !11, !noundef !12
  %1260 = trunc i8 %1259 to i1
  br i1 %1260, label %1262, label %1261

1261:                                             ; preds = %1258
  store i32 169, ptr %8, align 4
  br label %1325

1262:                                             ; preds = %1258
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #7
  %1263 = load ptr, ptr %71, align 8, !tbaa !5
  %1264 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr20as_StructConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %1263)
          to label %1265 unwind label %1271

1265:                                             ; preds = %1262
  store ptr %1264, ptr %118, align 8, !tbaa !5
  br label %1266

1266:                                             ; preds = %1319, %1265
  %1267 = load ptr, ptr %118, align 8, !tbaa !5
  %1268 = load i8, ptr %117, align 1, !tbaa !9, !range !11, !noundef !12
  %1269 = trunc i8 %1268 to i1
  br i1 %1269, label %1275, label %1270

1270:                                             ; preds = %1266
  store i32 172, ptr %8, align 4
  br label %1320

1271:                                             ; preds = %1262
  %1272 = landingpad { ptr, i32 }
          cleanup
  %1273 = extractvalue { ptr, i32 } %1272, 0
  store ptr %1273, ptr %22, align 8
  %1274 = extractvalue { ptr, i32 } %1272, 1
  store i32 %1274, ptr %23, align 4
  br label %1322

1275:                                             ; preds = %1266
  store i1 false, ptr %119, align 1
  call void @llvm.lifetime.start.p0(i64 112, ptr %121) #7
  %1276 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %121, i32 0, i32 0
  %1277 = load ptr, ptr %67, align 8, !tbaa !5
  %1278 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1277) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %1276, ptr noundef nonnull align 8 dereferenceable(88) %1278)
          to label %1279 unwind label %1295

1279:                                             ; preds = %1275
  %1280 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %121, i32 0, i32 1
  %1281 = load ptr, ptr %118, align 8, !tbaa !5
  %1282 = getelementptr inbounds %"struct.StaticTraitResolve::ValuePtr::Data_StructConstructor", ptr %1281, i32 0, i32 1
  %1283 = load ptr, ptr %1282, align 8, !tbaa !63
  invoke void @_ZN3HIR25TypeData_NamedFunction_TyC2EPKNS_6StructE(ptr noundef nonnull align 8 dereferenceable(24) %1280, ptr noundef %1283)
          to label %1284 unwind label %1299

1284:                                             ; preds = %1279
  %1285 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %1286 = load ptr, ptr %1285, align 8, !tbaa !43
  invoke void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8 %120, ptr noundef nonnull align 8 dereferenceable(112) %121, ptr noundef nonnull align 8 dereferenceable(8) %1286)
          to label %1287 unwind label %1303

1287:                                             ; preds = %1284
  invoke void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %120)
          to label %1288 unwind label %1307

1288:                                             ; preds = %1287
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %120) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %121) #7
  call void @llvm.lifetime.end.p0(i64 112, ptr %121) #7
  %1289 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 2
  %1290 = load ptr, ptr %1289, align 8, !tbaa !37
  %1291 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %122, i32 0, i32 1
  %1292 = load ptr, ptr %1291, align 8, !tbaa !43
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %1290, ptr noundef nonnull align 8 dereferenceable(8) %1292, ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %1293 unwind label %1313

1293:                                             ; preds = %1288
  store i1 true, ptr %119, align 1
  store i32 1, ptr %8, align 4
  %1294 = load i1, ptr %119, align 1
  br i1 %1294, label %1318, label %1317

1295:                                             ; preds = %1275
  %1296 = landingpad { ptr, i32 }
          cleanup
  %1297 = extractvalue { ptr, i32 } %1296, 0
  store ptr %1297, ptr %22, align 8
  %1298 = extractvalue { ptr, i32 } %1296, 1
  store i32 %1298, ptr %23, align 4
  br label %1312

1299:                                             ; preds = %1279
  %1300 = landingpad { ptr, i32 }
          cleanup
  %1301 = extractvalue { ptr, i32 } %1300, 0
  store ptr %1301, ptr %22, align 8
  %1302 = extractvalue { ptr, i32 } %1300, 1
  store i32 %1302, ptr %23, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %1276) #7
  br label %1312

1303:                                             ; preds = %1284
  %1304 = landingpad { ptr, i32 }
          cleanup
  %1305 = extractvalue { ptr, i32 } %1304, 0
  store ptr %1305, ptr %22, align 8
  %1306 = extractvalue { ptr, i32 } %1304, 1
  store i32 %1306, ptr %23, align 4
  br label %1311

1307:                                             ; preds = %1287
  %1308 = landingpad { ptr, i32 }
          cleanup
  %1309 = extractvalue { ptr, i32 } %1308, 0
  store ptr %1309, ptr %22, align 8
  %1310 = extractvalue { ptr, i32 } %1308, 1
  store i32 %1310, ptr %23, align 4
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %120) #7
  br label %1311

1311:                                             ; preds = %1307, %1303
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %121) #7
  br label %1312

1312:                                             ; preds = %1311, %1299, %1295
  call void @llvm.lifetime.end.p0(i64 112, ptr %121) #7
  br label %1322

1313:                                             ; preds = %1288
  %1314 = landingpad { ptr, i32 }
          cleanup
  %1315 = extractvalue { ptr, i32 } %1314, 0
  store ptr %1315, ptr %22, align 8
  %1316 = extractvalue { ptr, i32 } %1314, 1
  store i32 %1316, ptr %23, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %1322

1317:                                             ; preds = %1293
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %1318

1318:                                             ; preds = %1317, %1293
  br label %1320

1319:                                             ; No predecessors!
  store i8 0, ptr %117, align 1, !tbaa !9
  br label %1266, !llvm.loop !87

1320:                                             ; preds = %1318, %1270
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #7
  %1321 = load i32, ptr %8, align 4
  switch i32 %1321, label %1325 [
    i32 172, label %1323
  ]

1322:                                             ; preds = %1313, %1312, %1271
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #7
  br label %1332

1323:                                             ; preds = %1320
  br label %1324

1324:                                             ; preds = %1323
  store i8 0, ptr %117, align 1, !tbaa !9
  br label %1258, !llvm.loop !88

1325:                                             ; preds = %1320, %1261
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #7
  %1326 = load i32, ptr %8, align 4
  switch i32 %1326, label %1330 [
    i32 169, label %1327
  ]

1327:                                             ; preds = %1325
  br label %1328

1328:                                             ; preds = %1327, %1256, %1215, %1135, %1094, %1024, %937, %850, %811, %765
  br label %1329

1329:                                             ; preds = %1328
  store i8 0, ptr %70, align 1, !tbaa !9
  br label %758, !llvm.loop !89

1330:                                             ; preds = %1325, %1213, %1092, %1022, %935, %761
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  %1331 = load i32, ptr %8, align 4
  switch i32 %1331, label %1335 [
    i32 109, label %1333
  ]

1332:                                             ; preds = %1322, %1253, %1210, %1132, %1089, %1019, %932, %847, %808, %766
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #7
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #7
  br label %1342

1333:                                             ; preds = %1330
  br label %1334

1334:                                             ; preds = %1333
  store i8 0, ptr %70, align 1, !tbaa !9
  br label %749, !llvm.loop !90

1335:                                             ; preds = %1330, %752
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #7
  %1336 = load i32, ptr %8, align 4
  switch i32 %1336, label %1338 [
    i32 106, label %1337
  ]

1337:                                             ; preds = %1335
  store i32 0, ptr %8, align 4
  br label %1338

1338:                                             ; preds = %1337, %1335
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %69) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %68) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %68) #7
  %1339 = load i32, ptr %8, align 4
  switch i32 %1339, label %1343 [
    i32 0, label %1340
  ]

1340:                                             ; preds = %1338
  br label %1341

1341:                                             ; preds = %1340
  store i8 0, ptr %66, align 1, !tbaa !9
  br label %736, !llvm.loop !91

1342:                                             ; preds = %1332, %753
  call void @llvm.lifetime.end.p0(i64 24, ptr %69) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %68) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #7
  br label %1354

1343:                                             ; preds = %1338, %740
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  %1344 = load i32, ptr %8, align 4
  switch i32 %1344, label %1347 [
    i32 103, label %1345
  ]

1345:                                             ; preds = %1343
  br label %1346

1346:                                             ; preds = %1345
  store i8 0, ptr %66, align 1, !tbaa !9
  br label %729, !llvm.loop !92

1347:                                             ; preds = %1343, %732
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #7
  %1348 = load i32, ptr %8, align 4
  switch i32 %1348, label %1352 [
    i32 100, label %1349
  ]

1349:                                             ; preds = %1347
  br label %1350

1350:                                             ; preds = %1349, %727, %428, %397, %295, %268, %233, %211, %186, %161, %133
  br label %1351

1351:                                             ; preds = %1350
  store i8 0, ptr %7, align 1, !tbaa !9
  br label %129, !llvm.loop !93

1352:                                             ; preds = %1347, %725, %426, %395, %293, %266, %231, %209, %184, %159, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  %1353 = load i32, ptr %8, align 4
  switch i32 %1353, label %1357 [
    i32 5, label %1355
  ]

1354:                                             ; preds = %1342, %720, %390, %284, %260
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #7
  br label %1362

1355:                                             ; preds = %1352
  br label %1356

1356:                                             ; preds = %1355
  store i8 0, ptr %7, align 1, !tbaa !9
  br label %123, !llvm.loop !94

1357:                                             ; preds = %1352, %126
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #7
  %1358 = load i32, ptr %8, align 4
  switch i32 %1358, label %1367 [
    i32 2, label %1359
    i32 1, label %1361
  ]

1359:                                             ; preds = %1357
  %1360 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %1360, align 16, !tbaa !5
  call void @__cxa_throw(ptr %1360, ptr @_ZTIPKc, ptr null) #9
  unreachable

1361:                                             ; preds = %1357
  ret void

1362:                                             ; preds = %1354
  %1363 = load ptr, ptr %22, align 8
  %1364 = load i32, ptr %23, align 4
  %1365 = insertvalue { ptr, i32 } poison, ptr %1363, 0
  %1366 = insertvalue { ptr, i32 } %1365, i32 %1364, 1
  resume { ptr, i32 } %1366

1367:                                             ; preds = %1357, %1239, %1118, %833, %794, %521, %480, %368
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK18StaticTraitResolve9get_valueERK4SpanRKN3HIR4PathER14MonomorphStatebPPKNS3_13GenericParamsE(ptr dead_on_unwind writable sret(%"class.StaticTraitResolve::ValuePtr") align 8, ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(144), i1 noundef zeroext, ptr noundef) #3

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

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

declare noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) #3

declare void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK18TraitResolveCommon20get_const_param_typeERK4Spanj(ptr noundef nonnull align 8 dereferenceable(216), ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8, ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

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

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

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

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

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

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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { nounwind }
attributes #8 = { noreturn nounwind }
attributes #9 = { noreturn }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !18, i64 16}
!14 = !{!"_ZTSN3MIR8Constant8Data_IntE", !15, i64 0, !18, i64 16}
!15 = !{!"_ZTS4S128", !16, i64 0}
!16 = !{!"_ZTS4U128", !17, i64 0, !17, i64 8}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = !{!23, !18, i64 16}
!23 = !{!"_ZTSN3MIR8Constant9Data_UintE", !16, i64 0, !18, i64 16}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = !{!27, !18, i64 8}
!27 = !{!"_ZTSN3MIR8Constant10Data_FloatE", !28, i64 0, !18, i64 8}
!28 = !{!"double", !7, i64 0}
!29 = distinct !{!29, !20}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = !{!38, !6, i64 16}
!38 = !{!"_ZTSN3MIR11TypeResolveE", !39, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !40, i64 32, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !39, i64 112, !39, i64 116}
!39 = !{!"int", !7, i64 0}
!40 = !{!"_ZTS9FmtLambda", !41, i64 0}
!41 = !{!"_ZTSSt8functionIFvRSoEE", !42, i64 0, !6, i64 24}
!42 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!43 = !{!38, !6, i64 8}
!44 = distinct !{!44, !20}
!45 = distinct !{!45, !20}
!46 = !{!47, !39, i64 8}
!47 = !{!"_ZTSN3HIR10GenericRefE", !48, i64 0, !39, i64 8}
!48 = !{!"_ZTS8RcString", !6, i64 0}
!49 = distinct !{!49, !20}
!50 = distinct !{!50, !20}
!51 = distinct !{!51, !20}
!52 = distinct !{!52, !20}
!53 = distinct !{!53, !20}
!54 = distinct !{!54, !20}
!55 = !{!56, !6, i64 0}
!56 = !{!"_ZTSN18StaticTraitResolve8ValuePtr20Data_EnumConstructorE", !6, i64 0, !17, i64 8}
!57 = !{!58, !6, i64 0}
!58 = !{!"_ZTSN3HIR25TypeData_NamedFunction_Ty20Data_EnumConstructorE", !6, i64 0, !17, i64 8}
!59 = !{!56, !17, i64 8}
!60 = !{!58, !17, i64 8}
!61 = distinct !{!61, !20}
!62 = distinct !{!62, !20}
!63 = !{!64, !6, i64 8}
!64 = !{!"_ZTSN18StaticTraitResolve8ValuePtr22Data_StructConstructorE", !6, i64 0, !6, i64 8}
!65 = distinct !{!65, !20}
!66 = distinct !{!66, !20}
!67 = distinct !{!67, !20}
!68 = distinct !{!68, !20}
!69 = distinct !{!69, !20}
!70 = distinct !{!70, !20}
!71 = distinct !{!71, !20}
!72 = distinct !{!72, !20}
!73 = distinct !{!73, !20}
!74 = distinct !{!74, !20}
!75 = distinct !{!75, !20}
!76 = distinct !{!76, !20}
!77 = distinct !{!77, !20}
!78 = distinct !{!78, !20}
!79 = distinct !{!79, !20}
!80 = distinct !{!80, !20}
!81 = distinct !{!81, !20}
!82 = distinct !{!82, !20}
!83 = distinct !{!83, !20}
!84 = distinct !{!84, !20}
!85 = distinct !{!85, !20}
!86 = distinct !{!86, !20}
!87 = distinct !{!87, !20}
!88 = distinct !{!88, !20}
!89 = distinct !{!89, !20}
!90 = distinct !{!90, !20}
!91 = distinct !{!91, !20}
!92 = distinct !{!92, !20}
!93 = distinct !{!93, !20}
!94 = distinct !{!94, !20}


; 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.MonomorphState = type { %class.MonomorphiserPP, %"class.HIR::TypeRef", ptr, ptr, %"struct.HIR::PathParams" }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.236" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.236" = type { %"struct.std::_Vector_base.237" }
%"struct.std::_Vector_base.237" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.41, %class.ThinVector.42, %class.ThinVector.43 }
%class.ThinVector.41 = type { ptr }
%class.ThinVector.42 = type { ptr }
%class.ThinVector.43 = type { ptr }
%"class.StaticTraitResolve::ValuePtr" = type { i32, %"union.StaticTraitResolve::ValuePtr::DataUnion" }
%"union.StaticTraitResolve::ValuePtr::DataUnion" = type { %"struct.StaticTraitResolve::ValuePtr::Data_EnumConstructor" }
%"struct.StaticTraitResolve::ValuePtr::Data_EnumConstructor" = type { ptr, i64 }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.394 = type { ptr, ptr }
%class.anon.395 = type { ptr, ptr, ptr }
%class.anon.396 = type { ptr, 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.319", %"class.std::vector.324", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.319" = type { %"struct.std::_Vector_base.320" }
%"struct.std::_Vector_base.320" = 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.324" = type { %"struct.std::_Vector_base.325" }
%"struct.std::_Vector_base.325" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"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.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.45" }
%"struct.std::_Head_base.45" = type { ptr }
%"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 }
%class.anon.397 = type { ptr, ptr }
%class.anon.398 = type { ptr }
%"struct.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector" }
%"class.HIR::GenericParams" = type { %"class.std::vector.197", %"class.std::vector.202", %"class.std::vector.207", %"class.std::vector.212" }
%"class.std::vector.197" = type { %"struct.std::_Vector_base.198" }
%"struct.std::_Vector_base.198" = 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.202" = type { %"struct.std::_Vector_base.203" }
%"struct.std::_Vector_base.203" = 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.207" = type { %"struct.std::_Vector_base.208" }
%"struct.std::_Vector_base.208" = 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.212" = type { %"struct.std::_Vector_base.213" }
%"struct.std::_Vector_base.213" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.anon.399 = type { ptr, ptr }
%class.anon.400 = type { ptr, ptr }

@.str.6 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE = external hidden unnamed_addr constant [79 x i8], align 1
@__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE = external hidden unnamed_addr constant [15 x i8], align 1

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

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

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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull align 8 dereferenceable(40) %2) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
.lr.ph461:
  %3 = alloca %"class.HIR::TypeRef", align 8
  %4 = alloca %"class.HIR::TypeRef", align 8
  %5 = alloca %"class.HIR::TypeRef", align 8
  %6 = alloca %struct.MonomorphState, align 8
  %7 = alloca %"class.StaticTraitResolve::ValuePtr", align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"class.std::function", align 8
  %10 = alloca %class.anon.394, align 8
  %11 = alloca %struct.MonomorphState, align 8
  %12 = alloca %"class.StaticTraitResolve::ValuePtr", align 8
  %13 = alloca ptr, align 8
  %14 = alloca %"class.std::function", align 8
  %15 = alloca %class.anon.395, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %"class.std::function", align 8
  %18 = alloca %class.anon.396, align 8
  %19 = alloca %"class.HIR::TypeData", align 8
  %20 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %21 = alloca %"class.HIR::TypeData", align 8
  %22 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %23 = alloca %"class.HIR::TypeData", align 8
  %24 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %25 = alloca %struct.MonomorphState, align 8
  %26 = alloca %"class.StaticTraitResolve::ValuePtr", align 8
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::function", align 8
  %29 = alloca %class.anon.397, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"class.std::function", align 8
  %32 = alloca %class.anon.398, align 8
  %33 = alloca %"class.HIR::TypeRef", align 8
  %34 = alloca %"class.HIR::TypeRef", align 8
  %35 = alloca %"class.HIR::TypeRef", align 8
  %36 = alloca %"class.HIR::TypeRef", align 8
  %37 = alloca %"class.HIR::TypeRef", align 8
  %38 = alloca %"class.HIR::TypeRef", align 8
  %39 = alloca %"class.HIR::TypeRef", align 8
  %40 = alloca %"class.HIR::TypeRef", align 8
  %41 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %42 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %43 = alloca ptr, align 8
  %44 = alloca %"class.std::function", align 8
  %45 = alloca %class.anon.399, align 8
  %46 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %47 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %48 = alloca ptr, align 8
  %49 = alloca %"class.std::function", align 8
  %50 = alloca %class.anon.400, align 8
  %51 = alloca %"struct.HIR::TypeData_FunctionPointer", align 8
  %52 = alloca %"struct.HIR::TypeData::Data_NamedFunction", align 8
  %53 = getelementptr inbounds i8, ptr %1, i64 16
  %54 = getelementptr inbounds i8, ptr %1, i64 8
  %55 = getelementptr inbounds i8, ptr %52, i64 88
  %56 = getelementptr inbounds i8, ptr %47, i64 88
  %57 = getelementptr inbounds i8, ptr %42, i64 88
  %58 = tail call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  switch i32 %58, label %.loopexit426 [
    i32 0, label %60
    i32 1, label %61
    i32 2, label %65
    i32 3, label %69
    i32 4, label %73
    i32 5, label %75
    i32 6, label %85
    i32 7, label %90
    i32 8, label %126
    i32 9, label %134
    i32 10, label %.lr.ph
  ]

.loopexit426:                                     ; preds = %.lr.ph461, %.loopexit
  %59 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %59, align 16, !tbaa !5
  call void @__cxa_throw(ptr nonnull %59, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

60:                                               ; preds = %.lr.ph461
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 243, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE) #9
  unreachable

61:                                               ; preds = %.lr.ph461
  %62 = tail call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  %63 = getelementptr inbounds i8, ptr %62, i64 16
  %64 = load i32, ptr %63, align 8, !tbaa !9
  tail call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %64)
  br label %.thread418

65:                                               ; preds = %.lr.ph461
  %66 = tail call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  %67 = getelementptr inbounds i8, ptr %66, i64 16
  %68 = load i32, ptr %67, align 8, !tbaa !15
  tail call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %68)
  br label %.thread418

69:                                               ; preds = %.lr.ph461
  %70 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  %71 = getelementptr inbounds i8, ptr %70, i64 8
  %72 = load i32, ptr %71, align 8, !tbaa !17
  tail call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef %72)
  br label %.thread418

73:                                               ; preds = %.lr.ph461
  %74 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  tail call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 14)
  br label %.thread418

75:                                               ; preds = %.lr.ph461
  %76 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3MIR8Constant8as_BytesEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %4, i32 noundef 2)
  %77 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #7
  invoke void @_ZN3HIR7TypeRef9new_arrayES0_m(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %3, ptr noundef nonnull %4, i64 noundef %77)
          to label %78 unwind label %80

78:                                               ; preds = %75
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef 0, ptr noundef nonnull %3)
          to label %79 unwind label %82

79:                                               ; preds = %78
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #7
  br label %.thread418

80:                                               ; preds = %75
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %84

82:                                               ; preds = %78
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #7
  br label %84

84:                                               ; preds = %82, %80
  %.pn399 = phi { ptr, i32 } [ %83, %82 ], [ %81, %80 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #7
  br label %396

85:                                               ; preds = %.lr.ph461
  %86 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR8Constant15as_StaticStringB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(40) %2)
  call void @_ZN3HIR7TypeRefC2ENS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %5, i32 noundef 16)
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef 0, ptr noundef nonnull %5)
          to label %87 unwind label %88

87:                                               ; preds = %85
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  br label %.thread418

88:                                               ; preds = %85
  %89 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  br label %396

90:                                               ; preds = %.lr.ph461
  %91 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant8as_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %6) #7
  call void @_ZN14MonomorphStateC2Ev(ptr noundef nonnull align 8 dereferenceable(144) %6)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #7
  %92 = load ptr, ptr %53, align 8, !tbaa !20
  %93 = load ptr, ptr %54, align 8, !tbaa !26
  %94 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %91) #7
  invoke void @_ZNK18StaticTraitResolve9get_valueERK4SpanRKN3HIR4PathER14MonomorphStatebPPKNS3_13GenericParamsE(ptr dead_on_unwind nonnull writable sret(%"class.StaticTraitResolve::ValuePtr") align 8 %7, ptr noundef nonnull align 8 dereferenceable(424) %92, ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull align 8 dereferenceable(88) %94, ptr noundef nonnull align 8 dereferenceable(144) %6, i1 noundef zeroext true, ptr noundef null)
          to label %95 unwind label %107

95:                                               ; preds = %90
  %96 = call noundef ptr @_ZN18StaticTraitResolve8ValuePtr12opt_ConstantEv(ptr noundef nonnull align 8 dereferenceable(24) %7)
  %.not = icmp eq ptr %96, null
  br i1 %.not, label %114, label %97

97:                                               ; preds = %95
  %98 = load ptr, ptr %96, align 8, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %98, i64 96
  %100 = invoke noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8) %99, i1 noundef zeroext false)
          to label %101 unwind label %109

101:                                              ; preds = %97
  br i1 %100, label %102, label %113

102:                                              ; preds = %101
  %103 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(96) %6, ptr noundef nonnull align 8 dereferenceable(8) %103, ptr noundef nonnull align 8 dereferenceable(8) %99, i1 noundef zeroext true)
          to label %104 unwind label %109

104:                                              ; preds = %102
  %105 = load ptr, ptr %53, align 8, !tbaa !20
  %106 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %105, ptr noundef nonnull align 8 dereferenceable(8) %106, ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %123 unwind label %111

107:                                              ; preds = %90
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %125

109:                                              ; preds = %113, %102, %97
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %124

111:                                              ; preds = %104
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %124

113:                                              ; preds = %101
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %99)
          to label %123 unwind label %109

114:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #7
  store ptr %8, ptr %10, align 8, !tbaa !5
  %115 = getelementptr inbounds i8, ptr %10, i64 8
  store ptr %91, ptr %115, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(16) %10) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull %9)
          to label %116 unwind label %118

116:                                              ; preds = %114
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #7
  %117 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %117, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %117, ptr nonnull @_ZTIPKc, ptr null) #8
          to label %397 unwind label %120

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

120:                                              ; preds = %116
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %122

122:                                              ; preds = %120, %118
  %.pn393 = phi { ptr, i32 } [ %121, %120 ], [ %119, %118 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br label %124

123:                                              ; preds = %104, %113
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %6) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %6) #7
  br label %.thread418

124:                                              ; preds = %109, %111, %122
  %.pn395.pn = phi { ptr, i32 } [ %.pn393, %122 ], [ %112, %111 ], [ %110, %109 ]
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #7
  br label %125

125:                                              ; preds = %124, %107
  %.pn395.pn.pn = phi { ptr, i32 } [ %.pn395.pn, %124 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %6) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %6) #7
  br label %396

126:                                              ; preds = %.lr.ph461
  %127 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3MIR8Constant10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  %128 = load ptr, ptr %53, align 8, !tbaa !20
  %129 = getelementptr inbounds i8, ptr %128, i64 8
  %130 = load ptr, ptr %54, align 8, !tbaa !26
  %131 = getelementptr inbounds i8, ptr %127, i64 8
  %132 = load i32, ptr %131, align 8, !tbaa !27
  %133 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK18TraitResolveCommon20get_const_param_typeERK4Spanj(ptr noundef nonnull align 8 dereferenceable(216) %129, ptr noundef nonnull align 8 dereferenceable(8) %130, i32 noundef %132)
  tail call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, ptr noundef nonnull align 8 dereferenceable(8) %133)
  br label %.thread418

134:                                              ; preds = %.lr.ph461
  %135 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %11) #7
  call void @_ZN14MonomorphStateC2Ev(ptr noundef nonnull align 8 dereferenceable(144) %11)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #7
  %136 = load ptr, ptr %53, align 8, !tbaa !20
  %137 = load ptr, ptr %54, align 8, !tbaa !26
  %138 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %135) #7
  invoke void @_ZNK18StaticTraitResolve9get_valueERK4SpanRKN3HIR4PathER14MonomorphStatebPPKNS3_13GenericParamsE(ptr dead_on_unwind nonnull writable sret(%"class.StaticTraitResolve::ValuePtr") align 8 %12, ptr noundef nonnull align 8 dereferenceable(424) %136, ptr noundef nonnull align 8 dereferenceable(8) %137, ptr noundef nonnull align 8 dereferenceable(88) %138, ptr noundef nonnull align 8 dereferenceable(144) %11, i1 noundef zeroext true, ptr noundef null)
          to label %141 unwind label %139

139:                                              ; preds = %134
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %224

141:                                              ; preds = %134
  %142 = call noundef i32 @_ZNK18StaticTraitResolve8ValuePtr3tagEv(ptr noundef nonnull align 8 dereferenceable(24) %12)
  switch i32 %142, label %144 [
    i32 0, label %143
    i32 1, label %158
    i32 5, label %168
    i32 6, label %185
    i32 8, label %204
  ]

143:                                              ; preds = %141
  call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 285, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE) #9
  unreachable

144:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #7
  store ptr %13, ptr %15, align 8, !tbaa !5
  %145 = getelementptr inbounds i8, ptr %15, i64 8
  store ptr %12, ptr %145, align 8, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %15, i64 16
  store ptr %2, ptr %146, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %147 unwind label %150

147:                                              ; preds = %144
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull %14)
          to label %148 unwind label %152

148:                                              ; preds = %147
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #7
  %149 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %149, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %149, ptr nonnull @_ZTIPKc, ptr null) #8
          to label %397 unwind label %155

150:                                              ; preds = %144
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %154

152:                                              ; preds = %147
  %153 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %154

154:                                              ; preds = %152, %150
  %.pn387 = phi { ptr, i32 } [ %153, %152 ], [ %151, %150 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #7
  br label %157

155:                                              ; preds = %148
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %157

157:                                              ; preds = %155, %154
  %.pn389 = phi { ptr, i32 } [ %156, %155 ], [ %.pn387, %154 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  br label %222

158:                                              ; preds = %141
  %159 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN18StaticTraitResolve8ValuePtr11as_NotFoundEv(ptr noundef nonnull align 8 dereferenceable(24) %12)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #7
  store ptr %16, ptr %18, align 8, !tbaa !5
  %160 = getelementptr inbounds i8, ptr %18, i64 8
  store ptr %2, ptr %160, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(16) %18) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull %17)
          to label %161 unwind label %163

161:                                              ; preds = %158
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #7
  %162 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %162, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %162, ptr nonnull @_ZTIPKc, ptr null) #8
          to label %397 unwind label %165

163:                                              ; preds = %158
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #7
  br label %167

165:                                              ; preds = %161
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %167

167:                                              ; preds = %165, %163
  %.pn385 = phi { ptr, i32 } [ %166, %165 ], [ %164, %163 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  br label %222

168:                                              ; preds = %141
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN18StaticTraitResolve8ValuePtr11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(24) %12)
  %170 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %135) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %20, ptr noundef nonnull align 8 dereferenceable(88) %170)
          to label %173 unwind label %171

171:                                              ; preds = %168
  %172 = landingpad { ptr, i32 }
          cleanup
  br label %222

173:                                              ; preds = %168
  %174 = getelementptr inbounds i8, ptr %20, i64 88
  %175 = load ptr, ptr %169, align 8, !tbaa !5
  invoke void @_ZN3HIR25TypeData_NamedFunction_TyC2EPKNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(24) %174, ptr noundef %175)
          to label %176 unwind label %178

176:                                              ; preds = %173
  invoke void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %19, ptr noundef nonnull %20)
          to label %177 unwind label %180

177:                                              ; preds = %176
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %19)
          to label %223 unwind label %182

178:                                              ; preds = %173
  %179 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %20) #7
  br label %222

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

182:                                              ; preds = %177
  %183 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %19) #7
  br label %184

184:                                              ; preds = %182, %180
  %.pn382 = phi { ptr, i32 } [ %183, %182 ], [ %181, %180 ]
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %20) #7
  br label %222

185:                                              ; preds = %141
  %186 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr18as_EnumConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %12)
  %187 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %135) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %22, ptr noundef nonnull align 8 dereferenceable(88) %187)
          to label %190 unwind label %188

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

190:                                              ; preds = %185
  %191 = getelementptr inbounds i8, ptr %22, i64 88
  %192 = load ptr, ptr %186, align 8, !tbaa !30
  %193 = getelementptr inbounds i8, ptr %186, i64 8
  %194 = load i64, ptr %193, align 8, !tbaa !32
  invoke void @_ZN3HIR25TypeData_NamedFunction_Ty20make_EnumConstructorENS0_20Data_EnumConstructorE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8 %191, ptr %192, i64 %194)
          to label %195 unwind label %197

195:                                              ; preds = %190
  invoke void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %21, ptr noundef nonnull %22)
          to label %196 unwind label %199

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

197:                                              ; preds = %190
  %198 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %22) #7
  br label %222

199:                                              ; preds = %195
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %203

201:                                              ; preds = %196
  %202 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %21) #7
  br label %203

203:                                              ; preds = %201, %199
  %.pn379 = phi { ptr, i32 } [ %202, %201 ], [ %200, %199 ]
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %22) #7
  br label %222

204:                                              ; preds = %141
  %205 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr20as_StructConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %12)
  %206 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %135) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %24, ptr noundef nonnull align 8 dereferenceable(88) %206)
          to label %209 unwind label %207

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

209:                                              ; preds = %204
  %210 = getelementptr inbounds i8, ptr %24, i64 88
  %211 = getelementptr inbounds i8, ptr %205, i64 8
  %212 = load ptr, ptr %211, align 8, !tbaa !33
  invoke void @_ZN3HIR25TypeData_NamedFunction_TyC2EPKNS_6StructE(ptr noundef nonnull align 8 dereferenceable(24) %210, ptr noundef %212)
          to label %213 unwind label %215

213:                                              ; preds = %209
  invoke void @_ZN3HIR8TypeData18make_NamedFunctionENS0_18Data_NamedFunctionE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData") align 8 %23, ptr noundef nonnull %24)
          to label %214 unwind label %217

214:                                              ; preds = %213
  invoke void @_ZN3HIR7TypeRefC2ENS_8TypeDataE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %23)
          to label %223 unwind label %219

215:                                              ; preds = %209
  %216 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %24) #7
  br label %222

217:                                              ; preds = %213
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %221

219:                                              ; preds = %214
  %220 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %23) #7
  br label %221

221:                                              ; preds = %219, %217
  %.pn376 = phi { ptr, i32 } [ %220, %219 ], [ %218, %217 ]
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %24) #7
  br label %222

222:                                              ; preds = %207, %215, %221, %188, %197, %203, %171, %178, %184, %167, %157
  %.pn389.pn = phi { ptr, i32 } [ %.pn389, %157 ], [ %.pn385, %167 ], [ %.pn382, %184 ], [ %179, %178 ], [ %172, %171 ], [ %.pn379, %203 ], [ %198, %197 ], [ %189, %188 ], [ %.pn376, %221 ], [ %216, %215 ], [ %208, %207 ]
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #7
  br label %224

223:                                              ; preds = %214, %196, %177
  %.sink473 = phi ptr [ %19, %177 ], [ %21, %196 ], [ %23, %214 ]
  %.sink = phi ptr [ %20, %177 ], [ %22, %196 ], [ %24, %214 ]
  call void @_ZN3HIR8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(184) %.sink473) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %.sink) #7
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %11) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %11) #7
  br label %.thread418

224:                                              ; preds = %222, %139
  %.pn389.pn.pn = phi { ptr, i32 } [ %.pn389.pn, %222 ], [ %140, %139 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %11) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %11) #7
  br label %396

.lr.ph:                                           ; preds = %.lr.ph461
  %225 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %2)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %25) #7
  call void @_ZN14MonomorphStateC2Ev(ptr noundef nonnull align 8 dereferenceable(144) %25)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #7
  %226 = load ptr, ptr %53, align 8, !tbaa !20
  %227 = load ptr, ptr %54, align 8, !tbaa !26
  %228 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %225) #7
  invoke void @_ZNK18StaticTraitResolve9get_valueERK4SpanRKN3HIR4PathER14MonomorphStatebPPKNS3_13GenericParamsE(ptr dead_on_unwind nonnull writable sret(%"class.StaticTraitResolve::ValuePtr") align 8 %26, ptr noundef nonnull align 8 dereferenceable(424) %226, ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef nonnull align 8 dereferenceable(88) %228, ptr noundef nonnull align 8 dereferenceable(144) %25, i1 noundef zeroext true, ptr noundef null)
          to label %.preheader422.split unwind label %229

.loopexit:                                        ; preds = %.preheader422.split
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %25) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %25) #7
  br label %.loopexit426

229:                                              ; preds = %.lr.ph
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %395

.preheader422.split:                              ; preds = %.lr.ph
  %231 = call noundef i32 @_ZNK18StaticTraitResolve8ValuePtr3tagEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  switch i32 %231, label %.loopexit [
    i32 0, label %.split
    i32 1, label %.split439
    i32 2, label %.split441
    i32 3, label %.split443
    i32 4, label %.split445
    i32 5, label %.split448
    i32 7, label %.split451
    i32 6, label %.split453
    i32 9, label %.split456
    i32 8, label %.split458
  ], !llvm.loop !35

.split:                                           ; preds = %.preheader422.split
  call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 314, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE) #9
  unreachable

.split439:                                        ; preds = %.preheader422.split
  %232 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN18StaticTraitResolve8ValuePtr11as_NotFoundEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #7
  store ptr %27, ptr %29, align 8, !tbaa !5
  %233 = getelementptr inbounds i8, ptr %29, i64 8
  store ptr %2, ptr %233, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(16) %29) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull %28)
          to label %234 unwind label %236

234:                                              ; preds = %.split439
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #7
  %235 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %235, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %235, ptr nonnull @_ZTIPKc, ptr null) #8
          to label %397 unwind label %238

236:                                              ; preds = %.split439
  %237 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #7
  br label %240

238:                                              ; preds = %234
  %239 = landingpad { ptr, i32 }
          cleanup
  br label %240

240:                                              ; preds = %238, %236
  %.pn372 = phi { ptr, i32 } [ %239, %238 ], [ %237, %236 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  br label %394

.split441:                                        ; preds = %.preheader422.split
  %241 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN18StaticTraitResolve8ValuePtr14as_NotYetKnownEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #7
  store ptr %30, ptr %32, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(8) %32) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull %31)
          to label %242 unwind label %244

242:                                              ; preds = %.split441
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #7
  %243 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %243, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %243, ptr nonnull @_ZTIPKc, ptr null) #8
          to label %397 unwind label %246

244:                                              ; preds = %.split441
  %245 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #7
  br label %248

246:                                              ; preds = %242
  %247 = landingpad { ptr, i32 }
          cleanup
  br label %248

248:                                              ; preds = %246, %244
  %.pn370 = phi { ptr, i32 } [ %247, %246 ], [ %245, %244 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  br label %394

.split443:                                        ; preds = %.preheader422.split
  %249 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN18StaticTraitResolve8ValuePtr11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  %250 = load ptr, ptr %249, align 8, !tbaa !5
  %251 = getelementptr inbounds i8, ptr %250, i64 96
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #7
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %252 unwind label %261

252:                                              ; preds = %.split443
  %253 = invoke noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8) %251, i1 noundef zeroext false)
          to label %254 unwind label %263

254:                                              ; preds = %252
  br i1 %253, label %255, label %267

255:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #7
  %256 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %34, ptr noundef nonnull align 8 dereferenceable(96) %25, ptr noundef nonnull align 8 dereferenceable(8) %256, ptr noundef nonnull align 8 dereferenceable(8) %251, i1 noundef zeroext true)
          to label %257 unwind label %265

257:                                              ; preds = %255
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #7
  %259 = load ptr, ptr %53, align 8, !tbaa !20
  %260 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %259, ptr noundef nonnull align 8 dereferenceable(8) %260, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %272 unwind label %263

261:                                              ; preds = %.split443
  %262 = landingpad { ptr, i32 }
          cleanup
  br label %277

263:                                              ; preds = %257, %252
  %264 = landingpad { ptr, i32 }
          cleanup
  br label %276

265:                                              ; preds = %255
  %266 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #7
  br label %276

267:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #7
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %35, ptr noundef nonnull align 8 dereferenceable(8) %251)
          to label %268 unwind label %270

268:                                              ; preds = %267
  %269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %35)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #7
  br label %272

270:                                              ; preds = %267
  %271 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #7
  br label %276

272:                                              ; preds = %257, %268
  call void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %33)
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef 0, ptr noundef nonnull %36)
          to label %273 unwind label %274

273:                                              ; preds = %272
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #7
  br label %.thread

274:                                              ; preds = %272
  %275 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #7
  br label %276

276:                                              ; preds = %274, %270, %265, %263
  %.pn367 = phi { ptr, i32 } [ %275, %274 ], [ %264, %263 ], [ %266, %265 ], [ %271, %270 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #7
  br label %277

277:                                              ; preds = %276, %261
  %.pn367.pn = phi { ptr, i32 } [ %.pn367, %276 ], [ %262, %261 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #7
  br label %394

.split445:                                        ; preds = %.preheader422.split
  %278 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN18StaticTraitResolve8ValuePtr9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  %279 = load ptr, ptr %278, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 176
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #7
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %281 unwind label %290

281:                                              ; preds = %.split445
  %282 = invoke noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8) %280, i1 noundef zeroext false)
          to label %283 unwind label %292

283:                                              ; preds = %281
  br i1 %282, label %284, label %296

284:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #7
  %285 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %38, ptr noundef nonnull align 8 dereferenceable(96) %25, ptr noundef nonnull align 8 dereferenceable(8) %285, ptr noundef nonnull align 8 dereferenceable(8) %280, i1 noundef zeroext true)
          to label %286 unwind label %294

286:                                              ; preds = %284
  %287 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #7
  %288 = load ptr, ptr %53, align 8, !tbaa !20
  %289 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %288, ptr noundef nonnull align 8 dereferenceable(8) %289, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %301 unwind label %292

290:                                              ; preds = %.split445
  %291 = landingpad { ptr, i32 }
          cleanup
  br label %306

292:                                              ; preds = %286, %281
  %293 = landingpad { ptr, i32 }
          cleanup
  br label %305

294:                                              ; preds = %284
  %295 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #7
  br label %305

296:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #7
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %39, ptr noundef nonnull align 8 dereferenceable(8) %280)
          to label %297 unwind label %299

297:                                              ; preds = %296
  %298 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %39)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #7
  br label %301

299:                                              ; preds = %296
  %300 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #7
  br label %305

301:                                              ; preds = %286, %297
  call void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %37)
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %0, i32 noundef 0, ptr noundef nonnull %40)
          to label %302 unwind label %303

302:                                              ; preds = %301
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  br label %.thread

303:                                              ; preds = %301
  %304 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #7
  br label %305

305:                                              ; preds = %303, %299, %294, %292
  %.pn364 = phi { ptr, i32 } [ %304, %303 ], [ %293, %292 ], [ %295, %294 ], [ %300, %299 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #7
  br label %306

306:                                              ; preds = %305, %290
  %.pn364.pn = phi { ptr, i32 } [ %.pn364, %305 ], [ %291, %290 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  br label %394

.split448:                                        ; preds = %.preheader422.split
  %307 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN18StaticTraitResolve8ValuePtr11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %42) #7
  %308 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %225) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %42, ptr noundef nonnull align 8 dereferenceable(88) %308)
          to label %309 unwind label %317

309:                                              ; preds = %.split448
  %310 = load ptr, ptr %307, align 8, !tbaa !5
  invoke void @_ZN3HIR25TypeData_NamedFunction_TyC2EPKNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef %310)
          to label %311 unwind label %319

311:                                              ; preds = %309
  %312 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8 %41, ptr noundef nonnull align 8 dereferenceable(112) %42, ptr noundef nonnull align 8 dereferenceable(8) %312)
          to label %313 unwind label %321

313:                                              ; preds = %311
  invoke void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %41)
          to label %314 unwind label %323

314:                                              ; preds = %313
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %41) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %42) #7
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %42) #7
  %315 = load ptr, ptr %53, align 8, !tbaa !20
  %316 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %315, ptr noundef nonnull align 8 dereferenceable(8) %316, ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %.thread unwind label %327

317:                                              ; preds = %.split448
  %318 = landingpad { ptr, i32 }
          cleanup
  br label %326

319:                                              ; preds = %309
  %320 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %42) #7
  br label %326

321:                                              ; preds = %311
  %322 = landingpad { ptr, i32 }
          cleanup
  br label %325

323:                                              ; preds = %313
  %324 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %41) #7
  br label %325

325:                                              ; preds = %323, %321
  %.pn359 = phi { ptr, i32 } [ %324, %323 ], [ %322, %321 ]
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %42) #7
  br label %326

326:                                              ; preds = %325, %319, %317
  %.pn359.pn = phi { ptr, i32 } [ %.pn359, %325 ], [ %320, %319 ], [ %318, %317 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %42) #7
  br label %394

327:                                              ; preds = %314
  %328 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %394

.split451:                                        ; preds = %.preheader422.split
  %329 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr12as_EnumValueEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %45) #7
  store ptr %43, ptr %45, align 8, !tbaa !5
  %330 = getelementptr inbounds i8, ptr %45, i64 8
  store ptr %2, ptr %330, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(16) %45) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull %44)
          to label %331 unwind label %333

331:                                              ; preds = %.split451
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #7
  %332 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %332, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %332, ptr nonnull @_ZTIPKc, ptr null) #8
          to label %397 unwind label %335

333:                                              ; preds = %.split451
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #7
  br label %337

335:                                              ; preds = %331
  %336 = landingpad { ptr, i32 }
          cleanup
  br label %337

337:                                              ; preds = %335, %333
  %.pn357 = phi { ptr, i32 } [ %336, %335 ], [ %334, %333 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #7
  br label %394

.split453:                                        ; preds = %.preheader422.split
  %338 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr18as_EnumConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %47) #7
  %339 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %225) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %47, ptr noundef nonnull align 8 dereferenceable(88) %339)
          to label %340 unwind label %350

340:                                              ; preds = %.split453
  %341 = load ptr, ptr %338, align 8, !tbaa !30
  %342 = getelementptr inbounds i8, ptr %338, i64 8
  %343 = load i64, ptr %342, align 8, !tbaa !32
  invoke void @_ZN3HIR25TypeData_NamedFunction_Ty20make_EnumConstructorENS0_20Data_EnumConstructorE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeData_NamedFunction_Ty") align 8 %56, ptr %341, i64 %343)
          to label %344 unwind label %352

344:                                              ; preds = %340
  %345 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8 %46, ptr noundef nonnull align 8 dereferenceable(112) %47, ptr noundef nonnull align 8 dereferenceable(8) %345)
          to label %346 unwind label %354

346:                                              ; preds = %344
  invoke void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %46)
          to label %347 unwind label %356

347:                                              ; preds = %346
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %46) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %47) #7
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %47) #7
  %348 = load ptr, ptr %53, align 8, !tbaa !20
  %349 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %348, ptr noundef nonnull align 8 dereferenceable(8) %349, ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %.thread unwind label %360

350:                                              ; preds = %.split453
  %351 = landingpad { ptr, i32 }
          cleanup
  br label %359

352:                                              ; preds = %340
  %353 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %47) #7
  br label %359

354:                                              ; preds = %344
  %355 = landingpad { ptr, i32 }
          cleanup
  br label %358

356:                                              ; preds = %346
  %357 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %46) #7
  br label %358

358:                                              ; preds = %356, %354
  %.pn352 = phi { ptr, i32 } [ %357, %356 ], [ %355, %354 ]
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %47) #7
  br label %359

359:                                              ; preds = %358, %352, %350
  %.pn352.pn = phi { ptr, i32 } [ %.pn352, %358 ], [ %353, %352 ], [ %351, %350 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %47) #7
  br label %394

360:                                              ; preds = %347
  %361 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %394

.split456:                                        ; preds = %.preheader422.split
  %362 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr17as_StructConstantEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #7
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve14get_const_typeERKNS_8ConstantE, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %50) #7
  store ptr %48, ptr %50, align 8, !tbaa !5
  %363 = getelementptr inbounds i8, ptr %50, i64 8
  store ptr %2, ptr %363, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve14get_const_typeERKNS4_8ConstantEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(16) %50) #7
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull %49)
          to label %364 unwind label %366

364:                                              ; preds = %.split456
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #7
  %365 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.8, ptr %365, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %365, ptr nonnull @_ZTIPKc, ptr null) #8
          to label %397 unwind label %368

366:                                              ; preds = %.split456
  %367 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #7
  br label %370

368:                                              ; preds = %364
  %369 = landingpad { ptr, i32 }
          cleanup
  br label %370

370:                                              ; preds = %368, %366
  %.pn350 = phi { ptr, i32 } [ %369, %368 ], [ %367, %366 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #7
  br label %394

.split458:                                        ; preds = %.preheader422.split
  %371 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN18StaticTraitResolve8ValuePtr20as_StructConstructorEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %52) #7
  %372 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %225) #7
  invoke void @_ZNK3HIR4Path5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %52, ptr noundef nonnull align 8 dereferenceable(88) %372)
          to label %373 unwind label %382

373:                                              ; preds = %.split458
  %374 = getelementptr inbounds i8, ptr %371, i64 8
  %375 = load ptr, ptr %374, align 8, !tbaa !33
  invoke void @_ZN3HIR25TypeData_NamedFunction_TyC2EPKNS_6StructE(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef %375)
          to label %376 unwind label %384

376:                                              ; preds = %373
  %377 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8 %51, ptr noundef nonnull align 8 dereferenceable(112) %52, ptr noundef nonnull align 8 dereferenceable(8) %377)
          to label %378 unwind label %386

378:                                              ; preds = %376
  invoke void @_ZN3HIR7TypeRefC2ENS_24TypeData_FunctionPointerE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %51)
          to label %379 unwind label %388

379:                                              ; preds = %378
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %51) #7
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %52) #7
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %52) #7
  %380 = load ptr, ptr %53, align 8, !tbaa !20
  %381 = load ptr, ptr %54, align 8, !tbaa !26
  invoke void @_ZNK18StaticTraitResolve23expand_associated_typesERK4SpanRN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %380, ptr noundef nonnull align 8 dereferenceable(8) %381, ptr noundef nonnull align 8 dereferenceable(8) %0)
          to label %.thread unwind label %392

382:                                              ; preds = %.split458
  %383 = landingpad { ptr, i32 }
          cleanup
  br label %391

384:                                              ; preds = %373
  %385 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %52) #7
  br label %391

386:                                              ; preds = %376
  %387 = landingpad { ptr, i32 }
          cleanup
  br label %390

388:                                              ; preds = %378
  %389 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR24TypeData_FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %51) #7
  br label %390

390:                                              ; preds = %388, %386
  %.pn = phi { ptr, i32 } [ %389, %388 ], [ %387, %386 ]
  call void @_ZN3HIR8TypeData18Data_NamedFunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %52) #7
  br label %391

391:                                              ; preds = %390, %384, %382
  %.pn.pn = phi { ptr, i32 } [ %.pn, %390 ], [ %385, %384 ], [ %383, %382 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %52) #7
  br label %394

392:                                              ; preds = %379
  %393 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  br label %394

394:                                              ; preds = %391, %392, %359, %360, %326, %327, %370, %337, %306, %277, %248, %240
  %.pn348.pn = phi { ptr, i32 } [ %.pn350, %370 ], [ %.pn357, %337 ], [ %.pn364.pn, %306 ], [ %.pn367.pn, %277 ], [ %.pn370, %248 ], [ %.pn372, %240 ], [ %328, %327 ], [ %.pn359.pn, %326 ], [ %361, %360 ], [ %.pn352.pn, %359 ], [ %393, %392 ], [ %.pn.pn, %391 ]
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  br label %395

.thread:                                          ; preds = %273, %302, %314, %347, %379
  call void @_ZN18StaticTraitResolve8ValuePtrD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %25) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %25) #7
  br label %.thread418

395:                                              ; preds = %394, %229
  %.pn348.pn.pn = phi { ptr, i32 } [ %.pn348.pn, %394 ], [ %230, %229 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #7
  call void @_ZN14MonomorphStateD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %25) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %25) #7
  br label %396

396:                                              ; preds = %395, %224, %125, %88, %84
  %.pn348.pn.pn.pn = phi { ptr, i32 } [ %.pn348.pn.pn, %395 ], [ %.pn389.pn.pn, %224 ], [ %.pn395.pn.pn, %125 ], [ %89, %88 ], [ %.pn399, %84 ]
  resume { ptr, i32 } %.pn348.pn.pn.pn

.thread418:                                       ; preds = %.thread, %223, %126, %123, %87, %79, %73, %69, %65, %61
  ret void

397:                                              ; preds = %364, %331, %242, %234, %161, %148, %116
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK18StaticTraitResolve9get_valueERK4SpanRKN3HIR4PathER14MonomorphStatebPPKNS3_13GenericParamsE(ptr dead_on_unwind writable sret(%"class.StaticTraitResolve::ValuePtr") align 8, ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(144), i1 noundef zeroext, ptr noundef) local_unnamed_addr #3

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

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

declare noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) local_unnamed_addr #3

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK18TraitResolveCommon20get_const_param_typeERK4Spanj(ptr noundef nonnull align 8 dereferenceable(216), ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK3HIR8TypeData18Data_NamedFunction5decayERK4Span(ptr dead_on_unwind writable sret(%"struct.HIR::TypeData_FunctionPointer") align 8, ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

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

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

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

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

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

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

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

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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { nounwind }
attributes #8 = { noreturn }
attributes #9 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !14, i64 16}
!10 = !{!"_ZTSN3MIR8Constant8Data_IntE", !11, i64 0, !14, i64 16}
!11 = !{!"_ZTS4S128", !12, i64 0}
!12 = !{!"_ZTS4U128", !13, i64 0, !13, i64 8}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!15 = !{!16, !14, i64 16}
!16 = !{!"_ZTSN3MIR8Constant9Data_UintE", !12, i64 0, !14, i64 16}
!17 = !{!18, !14, i64 8}
!18 = !{!"_ZTSN3MIR8Constant10Data_FloatE", !19, i64 0, !14, i64 8}
!19 = !{!"double", !7, i64 0}
!20 = !{!21, !6, i64 16}
!21 = !{!"_ZTSN3MIR11TypeResolveE", !22, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !23, i64 32, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !22, i64 112, !22, i64 116}
!22 = !{!"int", !7, i64 0}
!23 = !{!"_ZTS9FmtLambda", !24, i64 0}
!24 = !{!"_ZTSSt8functionIFvRSoEE", !25, i64 0, !6, i64 24}
!25 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!26 = !{!21, !6, i64 8}
!27 = !{!28, !22, i64 8}
!28 = !{!"_ZTSN3HIR10GenericRefE", !29, i64 0, !22, i64 8}
!29 = !{!"_ZTS8RcString", !6, i64 0}
!30 = !{!31, !6, i64 0}
!31 = !{!"_ZTSN18StaticTraitResolve8ValuePtr20Data_EnumConstructorE", !6, i64 0, !13, i64 8}
!32 = !{!31, !13, i64 8}
!33 = !{!34, !6, i64 8}
!34 = !{!"_ZTSN18StaticTraitResolve8ValuePtr22Data_StructConstructorE", !6, i64 0, !6, i64 8}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}


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