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

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

%struct.LList = type { ptr, ptr }
%class.anon.91 = type { ptr, ptr, ptr }
%class.anon.92 = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.__gnu_cxx::__normal_iterator.116" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.152" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.153" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.154" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.155" = type { ptr }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.29" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.29" }
%"class.HIR::TypeRef" = type { 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 }
%"struct.HIR::PathParams" = type { %class.ThinVector.26, %class.ThinVector.27, %class.ThinVector.28 }
%class.ThinVector.26 = type { ptr }
%class.ThinVector.27 = type { ptr }
%class.ThinVector.28 = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.std::unique_ptr.29" = type { %"struct.std::__uniq_ptr_data.30" }
%"struct.std::__uniq_ptr_data.30" = type { %"class.std::__uniq_ptr_impl.31" }
%"class.std::__uniq_ptr_impl.31" = type { %"class.std::tuple.32" }
%"class.std::tuple.32" = type { %"struct.std::_Tuple_impl.33" }
%"struct.std::_Tuple_impl.33" = type { %"struct.std::_Head_base.36" }
%"struct.std::_Head_base.36" = type { ptr }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"class.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr.16", [8 x i8] }
%"class.std::unique_ptr.16" = type { %"struct.std::__uniq_ptr_data.17" }
%"struct.std::__uniq_ptr_data.17" = type { %"class.std::__uniq_ptr_impl.18" }
%"class.std::__uniq_ptr_impl.18" = type { %"class.std::tuple.19" }
%"class.std::tuple.19" = type { %"struct.std::_Tuple_impl.20" }
%"struct.std::_Tuple_impl.20" = type { %"struct.std::_Head_base.23" }
%"struct.std::_Head_base.23" = type { ptr }
%"struct.HIR::TypeData::Data_Closure" = type { ptr }
%"struct.HIR::ExprNode_Closure" = type { %"class.HIR::ExprNode.base", %"class.std::vector.93", %"class.HIR::TypeRef", %"class.std::unique_ptr.98", i8, i32, i8, %"struct.HIR::ExprNode_Closure::AvuCache", %"struct.HIR::LifetimeRef", ptr, %"class.HIR::GenericPath", %"class.HIR::GenericPath", %"class.std::vector.111" }
%"class.HIR::ExprNode.base" = type <{ ptr, %struct.Span, %"class.HIR::TypeRef", i32 }>
%struct.Span = type { ptr }
%"class.std::vector.93" = type { %"struct.std::_Vector_base.94" }
%"struct.std::_Vector_base.94" = type { %"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unique_ptr.98" = type { %"struct.std::__uniq_ptr_data.99" }
%"struct.std::__uniq_ptr_data.99" = type { %"class.std::__uniq_ptr_impl.100" }
%"class.std::__uniq_ptr_impl.100" = type { %"class.std::tuple.101" }
%"class.std::tuple.101" = type { %"struct.std::_Tuple_impl.102" }
%"struct.std::_Tuple_impl.102" = type { %"struct.std::_Head_base.105" }
%"struct.std::_Head_base.105" = type { ptr }
%"struct.HIR::ExprNode_Closure::AvuCache" = type { %"class.std::vector.85", %"class.std::vector.106" }
%"class.std::vector.85" = type { %"struct.std::_Vector_base.86" }
%"struct.std::_Vector_base.86" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.106" = type { %"struct.std::_Vector_base.107" }
%"struct.std::_Vector_base.107" = type { %"struct.std::_Vector_base<HIR::ExprNode_Closure::AvuCache::Capture, std::allocator<HIR::ExprNode_Closure::AvuCache::Capture>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ExprNode_Closure::AvuCache::Capture, std::allocator<HIR::ExprNode_Closure::AvuCache::Capture>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ExprNode_Closure::AvuCache::Capture, std::allocator<HIR::ExprNode_Closure::AvuCache::Capture>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ExprNode_Closure::AvuCache::Capture, std::allocator<HIR::ExprNode_Closure::AvuCache::Capture>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.111" = type { %"struct.std::_Vector_base.112" }
%"struct.std::_Vector_base.112" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::ExprNode>, std::allocator<std::unique_ptr<HIR::ExprNode>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::ExprNode>, std::allocator<std::unique_ptr<HIR::ExprNode>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::ExprNode>, std::allocator<std::unique_ptr<HIR::ExprNode>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::ExprNode>, std::allocator<std::unique_ptr<HIR::ExprNode>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair" = type { %"struct.HIR::Pattern", %"class.HIR::TypeRef" }
%"struct.HIR::Pattern" = type <{ %"class.std::vector.117", %"class.HIR::Pattern::Data", i32, [4 x i8] }>
%"class.std::vector.117" = type { %"struct.std::_Vector_base.118" }
%"struct.std::_Vector_base.118" = type { %"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Pattern::Data" = type { i32, %"union.HIR::Pattern::Data::DataUnion" }
%"union.HIR::Pattern::Data::DataUnion" = type { %"struct.HIR::Pattern::Data::Data_PathValue", [64 x i8] }
%"struct.HIR::Pattern::Data::Data_PathValue" = type { %"class.HIR::Path", %"class.HIR::Pattern::PathBinding" }
%"class.HIR::Pattern::PathBinding" = type { i32, %"union.HIR::Pattern::PathBinding::DataUnion" }
%"union.HIR::Pattern::PathBinding::DataUnion" = type { %"struct.HIR::Pattern::PathBinding::Data_Enum" }
%"struct.HIR::Pattern::PathBinding::Data_Enum" = type { ptr, i32 }
%"struct.HIR::TypeData::Data_Generator" = type { ptr }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"class.HIR::TypeData_NamedFunction_Ty" = type { i32, %"union.HIR::TypeData_NamedFunction_Ty::DataUnion" }
%"union.HIR::TypeData_NamedFunction_Ty::DataUnion" = type { %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" }
%"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" = type { ptr, i64 }
%"struct.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.60" }
%"class.HIR::GenericParams" = type { %"class.std::vector.65", %"class.std::vector.70", %"class.std::vector.75", %"class.std::vector.80" }
%"class.std::vector.65" = type { %"struct.std::_Vector_base.66" }
%"struct.std::_Vector_base.66" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.70" = type { %"struct.std::_Vector_base.71" }
%"struct.std::_Vector_base.71" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.75" = type { %"struct.std::_Vector_base.76" }
%"struct.std::_Vector_base.76" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.80" = type { %"struct.std::_Vector_base.81" }
%"struct.std::_Vector_base.81" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.60" = type { %"struct.std::_Vector_base.61" }
%"struct.std::_Vector_base.61" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData_TraitObject" = type <{ %"class.HIR::TraitPath", %"class.std::vector.45", %"struct.HIR::LifetimeRef", [4 x i8] }>
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr.29", %"class.HIR::GenericPath", %"class.std::map", %"class.std::map.40", ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.40" = type { %"class.std::_Rb_tree.41" }
%"class.std::_Rb_tree.41" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.50", %"class.std::vector.55", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.50" = type { %"struct.std::_Vector_base.51" }
%"struct.std::_Vector_base.51" = 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.55" = type { %"struct.std::_Vector_base.56" }
%"struct.std::_Vector_base.56" = 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_ErasedType_Inner::Data_Fcn" = type <{ %"class.HIR::Path", i32, [4 x i8] }>

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E = external hidden unnamed_addr constant [113 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [3 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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr %3, ptr %4) #4 align 2 {
  %6 = alloca %struct.LList, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca %struct.LList, align 8
  %13 = alloca %struct.LList, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca %struct.LList, align 8
  %17 = alloca %class.anon.91, align 8
  %18 = alloca %class.anon.92, align 8
  %19 = alloca i8, align 1
  %20 = alloca ptr, align 8
  %21 = alloca i8, align 1
  %22 = alloca ptr, align 8
  %23 = alloca i8, align 1
  %24 = alloca ptr, align 8
  %25 = alloca i8, align 1
  %26 = alloca ptr, align 8
  %27 = alloca i8, align 1
  %28 = alloca ptr, align 8
  %29 = alloca i8, align 1
  %30 = alloca ptr, align 8
  %31 = alloca i8, align 1
  %32 = alloca ptr, align 8
  %33 = alloca %"struct.HIR::LifetimeRef", align 4
  %34 = alloca %struct.LList, align 8
  %35 = alloca i8, align 1
  %36 = alloca ptr, align 8
  %37 = alloca %struct.LList, align 8
  %38 = alloca i8, align 1
  %39 = alloca ptr, align 8
  %40 = alloca %struct.LList, align 8
  %41 = alloca i8, align 1
  %42 = alloca ptr, align 8
  %43 = alloca %struct.LList, align 8
  %44 = alloca i8, align 1
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca %"class.__gnu_cxx::__normal_iterator.116", align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator.116", align 8
  %49 = alloca ptr, align 8
  %50 = alloca %struct.LList, align 8
  %51 = alloca %struct.LList, align 8
  %52 = alloca i8, align 1
  %53 = alloca ptr, align 8
  %54 = alloca i8, align 1
  %55 = alloca ptr, align 8
  %56 = alloca i8, align 1
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %60 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %61 = alloca ptr, align 8
  %62 = alloca %struct.LList, align 8
  %63 = alloca %struct.LList, align 8
  %64 = alloca i8, align 1
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca %"class.__gnu_cxx::__normal_iterator.153", align 8
  %68 = alloca %"class.__gnu_cxx::__normal_iterator.153", align 8
  %69 = alloca ptr, align 8
  %70 = alloca %struct.LList, align 8
  %71 = alloca %"struct.HIR::LifetimeRef", align 4
  %72 = alloca i8, align 1
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca %"class.__gnu_cxx::__normal_iterator.154", align 8
  %76 = alloca %"class.__gnu_cxx::__normal_iterator.154", align 8
  %77 = alloca ptr, align 8
  %78 = alloca ptr, align 8
  %79 = alloca %"class.__gnu_cxx::__normal_iterator.155", align 8
  %80 = alloca %"class.__gnu_cxx::__normal_iterator.155", align 8
  %81 = alloca ptr, align 8
  %82 = alloca i8, align 1
  %83 = alloca ptr, align 8
  %84 = alloca i8, align 1
  %85 = alloca ptr, align 8
  %86 = alloca i8, align 1
  %87 = alloca ptr, align 8
  %88 = alloca %struct.LList, align 8
  %89 = alloca i8, align 1
  %90 = alloca ptr, align 8
  %91 = alloca i8, align 1
  %92 = alloca ptr, align 8
  %93 = alloca ptr, align 8
  %94 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %95 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %96 = alloca ptr, align 8
  %97 = alloca %struct.LList, align 8
  %98 = getelementptr inbounds { ptr, ptr }, ptr %6, i32 0, i32 0
  store ptr %3, ptr %98, align 8
  %99 = getelementptr inbounds { ptr, ptr }, ptr %6, i32 0, i32 1
  store ptr %4, ptr %99, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  %100 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %101 = load ptr, ptr %9, align 8, !tbaa !5
  %102 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %101)
  store ptr %102, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  store ptr %6, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #8
  %103 = load ptr, ptr %11, align 8, !tbaa !5
  %104 = call { ptr, ptr } @_ZNK5LListIPKN3HIR7TypeRefEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %103)
  %105 = getelementptr inbounds { ptr, ptr }, ptr %12, i32 0, i32 0
  %106 = extractvalue { ptr, ptr } %104, 0
  store ptr %106, ptr %105, align 8
  %107 = getelementptr inbounds { ptr, ptr }, ptr %12, i32 0, i32 1
  %108 = extractvalue { ptr, ptr } %104, 1
  store ptr %108, ptr %107, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #8
  %109 = load ptr, ptr %11, align 8, !tbaa !5
  %110 = call { ptr, ptr } @_ZNK5LListIPKN3HIR7TypeRefEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %109)
  %111 = getelementptr inbounds { ptr, ptr }, ptr %13, i32 0, i32 0
  %112 = extractvalue { ptr, ptr } %110, 0
  store ptr %112, ptr %111, align 8
  %113 = getelementptr inbounds { ptr, ptr }, ptr %13, i32 0, i32 1
  %114 = extractvalue { ptr, ptr } %110, 1
  store ptr %114, ptr %113, align 8
  br label %115

115:                                              ; preds = %135, %5
  %116 = call noundef zeroext i1 @_ZN5LListIPKN3HIR7TypeRefEEneERKS4_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(16) %13)
  br i1 %116, label %118, label %117

117:                                              ; preds = %115
  store i32 2, ptr %14, align 4
  br label %136

118:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5LListIPKN3HIR7TypeRefEEdeEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
  %120 = load ptr, ptr %119, align 8, !tbaa !5
  store ptr %120, ptr %15, align 8, !tbaa !5
  %121 = load ptr, ptr %15, align 8, !tbaa !5
  %122 = icmp ne ptr %121, null
  br i1 %122, label %123, label %131

123:                                              ; preds = %118
  %124 = load ptr, ptr %15, align 8, !tbaa !5
  %125 = load ptr, ptr %10, align 8, !tbaa !5
  %126 = icmp eq ptr %124, %125
  br i1 %126, label %127, label %130

127:                                              ; preds = %123
  %128 = load ptr, ptr %8, align 8, !tbaa !5
  %129 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %128, ptr noundef @.str.12)
  store i32 1, ptr %14, align 4
  br label %132

130:                                              ; preds = %123
  br label %131

131:                                              ; preds = %130, %118
  store i32 0, ptr %14, align 4
  br label %132

132:                                              ; preds = %131, %127
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  %133 = load i32, ptr %14, align 4
  switch i32 %133, label %136 [
    i32 0, label %134
  ]

134:                                              ; preds = %132
  br label %135

135:                                              ; preds = %134
  call void @_ZN5LListIPKN3HIR7TypeRefEEppEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
  br label %115

136:                                              ; preds = %132, %117
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  %137 = load i32, ptr %14, align 4
  switch i32 %137, label %878 [
    i32 2, label %138
  ]

138:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #8
  %139 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN5LListIPKN3HIR7TypeRefEEC2EPKS4_S3_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef %6, ptr noundef %139)
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #8
  %140 = getelementptr inbounds %class.anon.91, ptr %17, i32 0, i32 0
  %141 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %141, ptr %140, align 8, !tbaa !5
  %142 = getelementptr inbounds %class.anon.91, ptr %17, i32 0, i32 1
  store ptr %100, ptr %142, align 8, !tbaa !9
  %143 = getelementptr inbounds %class.anon.91, ptr %17, i32 0, i32 2
  store ptr %16, ptr %143, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #8
  %144 = getelementptr inbounds %class.anon.92, ptr %18, i32 0, i32 0
  store ptr %100, ptr %144, align 8, !tbaa !11
  %145 = getelementptr inbounds %class.anon.92, ptr %18, i32 0, i32 1
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %146, ptr %145, align 8, !tbaa !5
  %147 = getelementptr inbounds %class.anon.92, ptr %18, i32 0, i32 2
  store ptr %16, ptr %147, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #8
  store i8 1, ptr %19, align 1, !tbaa !13
  br label %148

148:                                              ; preds = %876, %138
  %149 = load i8, ptr %19, align 1, !tbaa !13, !range !15, !noundef !16
  %150 = trunc i8 %149 to i1
  br i1 %150, label %152, label %151

151:                                              ; preds = %148
  store i32 4, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  br label %877

152:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %153)
  store ptr %154, ptr %20, align 8, !tbaa !5
  br label %155

155:                                              ; preds = %874, %152
  %156 = load i8, ptr %19, align 1, !tbaa !13, !range !15, !noundef !16
  %157 = trunc i8 %156 to i1
  br i1 %157, label %159, label %158

158:                                              ; preds = %155
  store i32 7, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %875

159:                                              ; preds = %155
  %160 = load ptr, ptr %20, align 8, !tbaa !5
  %161 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %160)
  switch i32 %161, label %873 [
    i32 0, label %162
    i32 1, label %163
    i32 3, label %184
    i32 2, label %205
    i32 5, label %226
    i32 4, label %247
    i32 11, label %267
    i32 12, label %317
    i32 9, label %355
    i32 8, label %384
    i32 15, label %417
    i32 16, label %482
    i32 13, label %507
    i32 14, label %531
    i32 6, label %603
    i32 7, label %663
    i32 10, label %828
  ]

162:                                              ; preds = %159
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 301, ptr noundef @__PRETTY_FUNCTION__._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E) #9
  unreachable

163:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #8
  store i8 1, ptr %21, align 1, !tbaa !13
  br label %164

164:                                              ; preds = %182, %163
  %165 = load i8, ptr %21, align 1, !tbaa !13, !range !15, !noundef !16
  %166 = trunc i8 %165 to i1
  br i1 %166, label %168, label %167

167:                                              ; preds = %164
  store i32 11, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #8
  br label %183

168:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %169 = load ptr, ptr %20, align 8, !tbaa !5
  %170 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %169)
  store ptr %170, ptr %22, align 8, !tbaa !5
  br label %171

171:                                              ; preds = %180, %168
  %172 = load ptr, ptr %22, align 8, !tbaa !5
  %173 = load i8, ptr %21, align 1, !tbaa !13, !range !15, !noundef !16
  %174 = trunc i8 %173 to i1
  br i1 %174, label %176, label %175

175:                                              ; preds = %171
  store i32 14, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %181

176:                                              ; preds = %171
  %177 = load ptr, ptr %8, align 8, !tbaa !5
  %178 = load ptr, ptr %10, align 8, !tbaa !5
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %177, ptr noundef nonnull align 8 dereferenceable(8) %178)
  br label %180

180:                                              ; preds = %176
  store i8 0, ptr %21, align 1, !tbaa !13
  br label %171, !llvm.loop !17

181:                                              ; preds = %175
  br label %182

182:                                              ; preds = %181
  store i8 0, ptr %21, align 1, !tbaa !13
  br label %164, !llvm.loop !19

183:                                              ; preds = %167
  br label %873

184:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #8
  store i8 1, ptr %23, align 1, !tbaa !13
  br label %185

185:                                              ; preds = %203, %184
  %186 = load i8, ptr %23, align 1, !tbaa !13, !range !15, !noundef !16
  %187 = trunc i8 %186 to i1
  br i1 %187, label %189, label %188

188:                                              ; preds = %185
  store i32 17, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #8
  br label %204

189:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %190 = load ptr, ptr %20, align 8, !tbaa !5
  %191 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %190)
  store ptr %191, ptr %24, align 8, !tbaa !5
  br label %192

192:                                              ; preds = %201, %189
  %193 = load ptr, ptr %24, align 8, !tbaa !5
  %194 = load i8, ptr %23, align 1, !tbaa !13, !range !15, !noundef !16
  %195 = trunc i8 %194 to i1
  br i1 %195, label %197, label %196

196:                                              ; preds = %192
  store i32 20, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %202

197:                                              ; preds = %192
  %198 = load ptr, ptr %8, align 8, !tbaa !5
  %199 = load ptr, ptr %10, align 8, !tbaa !5
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %198, ptr noundef nonnull align 8 dereferenceable(8) %199)
  br label %201

201:                                              ; preds = %197
  store i8 0, ptr %23, align 1, !tbaa !13
  br label %192, !llvm.loop !20

202:                                              ; preds = %196
  br label %203

203:                                              ; preds = %202
  store i8 0, ptr %23, align 1, !tbaa !13
  br label %185, !llvm.loop !21

204:                                              ; preds = %188
  br label %873

205:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #8
  store i8 1, ptr %25, align 1, !tbaa !13
  br label %206

206:                                              ; preds = %224, %205
  %207 = load i8, ptr %25, align 1, !tbaa !13, !range !15, !noundef !16
  %208 = trunc i8 %207 to i1
  br i1 %208, label %210, label %209

209:                                              ; preds = %206
  store i32 23, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  br label %225

210:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %211 = load ptr, ptr %20, align 8, !tbaa !5
  %212 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %211)
  store ptr %212, ptr %26, align 8, !tbaa !5
  br label %213

213:                                              ; preds = %222, %210
  %214 = load ptr, ptr %26, align 8, !tbaa !5
  %215 = load i8, ptr %25, align 1, !tbaa !13, !range !15, !noundef !16
  %216 = trunc i8 %215 to i1
  br i1 %216, label %218, label %217

217:                                              ; preds = %213
  store i32 26, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %223

218:                                              ; preds = %213
  %219 = load ptr, ptr %8, align 8, !tbaa !5
  %220 = load ptr, ptr %10, align 8, !tbaa !5
  %221 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %219, ptr noundef nonnull align 8 dereferenceable(8) %220)
  br label %222

222:                                              ; preds = %218
  store i8 0, ptr %25, align 1, !tbaa !13
  br label %213, !llvm.loop !22

223:                                              ; preds = %217
  br label %224

224:                                              ; preds = %223
  store i8 0, ptr %25, align 1, !tbaa !13
  br label %206, !llvm.loop !23

225:                                              ; preds = %209
  br label %873

226:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #8
  store i8 1, ptr %27, align 1, !tbaa !13
  br label %227

227:                                              ; preds = %245, %226
  %228 = load i8, ptr %27, align 1, !tbaa !13, !range !15, !noundef !16
  %229 = trunc i8 %228 to i1
  br i1 %229, label %231, label %230

230:                                              ; preds = %227
  store i32 29, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #8
  br label %246

231:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %232 = load ptr, ptr %20, align 8, !tbaa !5
  %233 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %232)
  store ptr %233, ptr %28, align 8, !tbaa !5
  br label %234

234:                                              ; preds = %243, %231
  %235 = load ptr, ptr %28, align 8, !tbaa !5
  %236 = load i8, ptr %27, align 1, !tbaa !13, !range !15, !noundef !16
  %237 = trunc i8 %236 to i1
  br i1 %237, label %239, label %238

238:                                              ; preds = %234
  store i32 32, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %244

239:                                              ; preds = %234
  %240 = load ptr, ptr %8, align 8, !tbaa !5
  %241 = load ptr, ptr %10, align 8, !tbaa !5
  %242 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %240, ptr noundef nonnull align 8 dereferenceable(8) %241)
  br label %243

243:                                              ; preds = %239
  store i8 0, ptr %27, align 1, !tbaa !13
  br label %234, !llvm.loop !24

244:                                              ; preds = %238
  br label %245

245:                                              ; preds = %244
  store i8 0, ptr %27, align 1, !tbaa !13
  br label %227, !llvm.loop !25

246:                                              ; preds = %230
  br label %873

247:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #8
  store i8 1, ptr %29, align 1, !tbaa !13
  br label %248

248:                                              ; preds = %265, %247
  %249 = load i8, ptr %29, align 1, !tbaa !13, !range !15, !noundef !16
  %250 = trunc i8 %249 to i1
  br i1 %250, label %252, label %251

251:                                              ; preds = %248
  store i32 35, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #8
  br label %266

252:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %253 = load ptr, ptr %20, align 8, !tbaa !5
  %254 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %253)
  store ptr %254, ptr %30, align 8, !tbaa !5
  br label %255

255:                                              ; preds = %263, %252
  %256 = load ptr, ptr %30, align 8, !tbaa !5
  %257 = load i8, ptr %29, align 1, !tbaa !13, !range !15, !noundef !16
  %258 = trunc i8 %257 to i1
  br i1 %258, label %260, label %259

259:                                              ; preds = %255
  store i32 38, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %264

260:                                              ; preds = %255
  %261 = load ptr, ptr %30, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %261, i32 0, i32 0
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_0clERKNS1_4PathE"(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(88) %262)
  br label %263

263:                                              ; preds = %260
  store i8 0, ptr %29, align 1, !tbaa !13
  br label %255, !llvm.loop !26

264:                                              ; preds = %259
  br label %265

265:                                              ; preds = %264
  store i8 0, ptr %29, align 1, !tbaa !13
  br label %248, !llvm.loop !27

266:                                              ; preds = %251
  br label %873

267:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #8
  store i8 1, ptr %31, align 1, !tbaa !13
  br label %268

268:                                              ; preds = %315, %267
  %269 = load i8, ptr %31, align 1, !tbaa !13, !range !15, !noundef !16
  %270 = trunc i8 %269 to i1
  br i1 %270, label %272, label %271

271:                                              ; preds = %268
  store i32 41, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #8
  br label %316

272:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %273 = load ptr, ptr %20, align 8, !tbaa !5
  %274 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %273)
  store ptr %274, ptr %32, align 8, !tbaa !5
  br label %275

275:                                              ; preds = %313, %272
  %276 = load ptr, ptr %32, align 8, !tbaa !5
  %277 = load i8, ptr %31, align 1, !tbaa !13, !range !15, !noundef !16
  %278 = trunc i8 %277 to i1
  br i1 %278, label %280, label %279

279:                                              ; preds = %275
  store i32 44, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %314

280:                                              ; preds = %275
  %281 = load ptr, ptr %8, align 8, !tbaa !5
  %282 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %281, ptr noundef @.str.14)
  %283 = load ptr, ptr %32, align 8, !tbaa !5
  %284 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %283, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  call void @_ZN3HIR11LifetimeRefC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %33)
  %285 = call noundef zeroext i1 @_ZNK3HIR11LifetimeRefneERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %284, ptr noundef nonnull align 4 dereferenceable(4) %33)
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br i1 %285, label %286, label %292

286:                                              ; preds = %280
  %287 = load ptr, ptr %8, align 8, !tbaa !5
  %288 = load ptr, ptr %32, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %288, i32 0, i32 0
  %290 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_11LifetimeRefE(ptr noundef nonnull align 8 dereferenceable(8) %287, ptr noundef nonnull align 4 dereferenceable(4) %289)
  %291 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %290, ptr noundef @.str.4)
  br label %292

292:                                              ; preds = %286, %280
  %293 = load ptr, ptr %32, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %293, i32 0, i32 1
  %295 = load i32, ptr %294, align 4, !tbaa !28
  switch i32 %295, label %305 [
    i32 0, label %296
    i32 1, label %299
    i32 2, label %302
  ]

296:                                              ; preds = %292
  %297 = load ptr, ptr %8, align 8, !tbaa !5
  %298 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %297, ptr noundef @.str.15)
  br label %305

299:                                              ; preds = %292
  %300 = load ptr, ptr %8, align 8, !tbaa !5
  %301 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %300, ptr noundef @.str.16)
  br label %305

302:                                              ; preds = %292
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  %304 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %303, ptr noundef @.str.17)
  br label %305

305:                                              ; preds = %302, %299, %296, %292
  %306 = load ptr, ptr %8, align 8, !tbaa !5
  %307 = load ptr, ptr %32, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %307, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %34, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %309 = getelementptr inbounds { ptr, ptr }, ptr %34, i32 0, i32 0
  %310 = load ptr, ptr %309, align 8
  %311 = getelementptr inbounds { ptr, ptr }, ptr %34, i32 0, i32 1
  %312 = load ptr, ptr %311, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %306, ptr noundef nonnull align 8 dereferenceable(8) %308, ptr %310, ptr %312)
  br label %313

313:                                              ; preds = %305
  store i8 0, ptr %31, align 1, !tbaa !13
  br label %275, !llvm.loop !35

314:                                              ; preds = %279
  br label %315

315:                                              ; preds = %314
  store i8 0, ptr %31, align 1, !tbaa !13
  br label %268, !llvm.loop !36

316:                                              ; preds = %271
  br label %873

317:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #8
  store i8 1, ptr %35, align 1, !tbaa !13
  br label %318

318:                                              ; preds = %353, %317
  %319 = load i8, ptr %35, align 1, !tbaa !13, !range !15, !noundef !16
  %320 = trunc i8 %319 to i1
  br i1 %320, label %322, label %321

321:                                              ; preds = %318
  store i32 48, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #8
  br label %354

322:                                              ; preds = %318
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %323 = load ptr, ptr %20, align 8, !tbaa !5
  %324 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %323)
  store ptr %324, ptr %36, align 8, !tbaa !5
  br label %325

325:                                              ; preds = %351, %322
  %326 = load ptr, ptr %36, align 8, !tbaa !5
  %327 = load i8, ptr %35, align 1, !tbaa !13, !range !15, !noundef !16
  %328 = trunc i8 %327 to i1
  br i1 %328, label %330, label %329

329:                                              ; preds = %325
  store i32 51, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %352

330:                                              ; preds = %325
  %331 = load ptr, ptr %36, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %331, i32 0, i32 0
  %333 = load i32, ptr %332, align 8, !tbaa !37
  switch i32 %333, label %343 [
    i32 0, label %334
    i32 1, label %337
    i32 2, label %340
  ]

334:                                              ; preds = %330
  %335 = load ptr, ptr %8, align 8, !tbaa !5
  %336 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %335, ptr noundef @.str.18)
  br label %343

337:                                              ; preds = %330
  %338 = load ptr, ptr %8, align 8, !tbaa !5
  %339 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %338, ptr noundef @.str.19)
  br label %343

340:                                              ; preds = %330
  %341 = load ptr, ptr %8, align 8, !tbaa !5
  %342 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %341, ptr noundef @.str.20)
  br label %343

343:                                              ; preds = %340, %337, %334, %330
  %344 = load ptr, ptr %8, align 8, !tbaa !5
  %345 = load ptr, ptr %36, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %345, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %347 = getelementptr inbounds { ptr, ptr }, ptr %37, i32 0, i32 0
  %348 = load ptr, ptr %347, align 8
  %349 = getelementptr inbounds { ptr, ptr }, ptr %37, i32 0, i32 1
  %350 = load ptr, ptr %349, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %344, ptr noundef nonnull align 8 dereferenceable(8) %346, ptr %348, ptr %350)
  br label %351

351:                                              ; preds = %343
  store i8 0, ptr %35, align 1, !tbaa !13
  br label %325, !llvm.loop !39

352:                                              ; preds = %329
  br label %353

353:                                              ; preds = %352
  store i8 0, ptr %35, align 1, !tbaa !13
  br label %318, !llvm.loop !40

354:                                              ; preds = %321
  br label %873

355:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #8
  store i8 1, ptr %38, align 1, !tbaa !13
  br label %356

356:                                              ; preds = %382, %355
  %357 = load i8, ptr %38, align 1, !tbaa !13, !range !15, !noundef !16
  %358 = trunc i8 %357 to i1
  br i1 %358, label %360, label %359

359:                                              ; preds = %356
  store i32 55, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #8
  br label %383

360:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %361 = load ptr, ptr %20, align 8, !tbaa !5
  %362 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %361)
  store ptr %362, ptr %39, align 8, !tbaa !5
  br label %363

363:                                              ; preds = %380, %360
  %364 = load ptr, ptr %39, align 8, !tbaa !5
  %365 = load i8, ptr %38, align 1, !tbaa !13, !range !15, !noundef !16
  %366 = trunc i8 %365 to i1
  br i1 %366, label %368, label %367

367:                                              ; preds = %363
  store i32 58, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %381

368:                                              ; preds = %363
  %369 = load ptr, ptr %8, align 8, !tbaa !5
  %370 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %369, ptr noundef @.str.21)
  %371 = load ptr, ptr %8, align 8, !tbaa !5
  %372 = load ptr, ptr %39, align 8, !tbaa !5
  %373 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %372, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %374 = getelementptr inbounds { ptr, ptr }, ptr %40, i32 0, i32 0
  %375 = load ptr, ptr %374, align 8
  %376 = getelementptr inbounds { ptr, ptr }, ptr %40, i32 0, i32 1
  %377 = load ptr, ptr %376, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %371, ptr noundef nonnull align 8 dereferenceable(8) %373, ptr %375, ptr %377)
  %378 = load ptr, ptr %8, align 8, !tbaa !5
  %379 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %378, ptr noundef @.str.22)
  br label %380

380:                                              ; preds = %368
  store i8 0, ptr %38, align 1, !tbaa !13
  br label %363, !llvm.loop !41

381:                                              ; preds = %367
  br label %382

382:                                              ; preds = %381
  store i8 0, ptr %38, align 1, !tbaa !13
  br label %356, !llvm.loop !42

383:                                              ; preds = %359
  br label %873

384:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #8
  store i8 1, ptr %41, align 1, !tbaa !13
  br label %385

385:                                              ; preds = %415, %384
  %386 = load i8, ptr %41, align 1, !tbaa !13, !range !15, !noundef !16
  %387 = trunc i8 %386 to i1
  br i1 %387, label %389, label %388

388:                                              ; preds = %385
  store i32 61, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #8
  br label %416

389:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %390 = load ptr, ptr %20, align 8, !tbaa !5
  %391 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %390)
  store ptr %391, ptr %42, align 8, !tbaa !5
  br label %392

392:                                              ; preds = %413, %389
  %393 = load ptr, ptr %42, align 8, !tbaa !5
  %394 = load i8, ptr %41, align 1, !tbaa !13, !range !15, !noundef !16
  %395 = trunc i8 %394 to i1
  br i1 %395, label %397, label %396

396:                                              ; preds = %392
  store i32 64, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  br label %414

397:                                              ; preds = %392
  %398 = load ptr, ptr %8, align 8, !tbaa !5
  %399 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %398, ptr noundef @.str.21)
  %400 = load ptr, ptr %8, align 8, !tbaa !5
  %401 = load ptr, ptr %42, align 8, !tbaa !5
  %402 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %401, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %43, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %403 = getelementptr inbounds { ptr, ptr }, ptr %43, i32 0, i32 0
  %404 = load ptr, ptr %403, align 8
  %405 = getelementptr inbounds { ptr, ptr }, ptr %43, i32 0, i32 1
  %406 = load ptr, ptr %405, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %400, ptr noundef nonnull align 8 dereferenceable(8) %402, ptr %404, ptr %406)
  %407 = load ptr, ptr %8, align 8, !tbaa !5
  %408 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %407, ptr noundef @.str.23)
  %409 = load ptr, ptr %42, align 8, !tbaa !5
  %410 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %409, i32 0, i32 1
  %411 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_9ArraySizeE(ptr noundef nonnull align 8 dereferenceable(8) %408, ptr noundef nonnull align 8 dereferenceable(32) %410)
  %412 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %411, ptr noundef @.str.22)
  br label %413

413:                                              ; preds = %397
  store i8 0, ptr %41, align 1, !tbaa !13
  br label %392, !llvm.loop !43

414:                                              ; preds = %396
  br label %415

415:                                              ; preds = %414
  store i8 0, ptr %41, align 1, !tbaa !13
  br label %385, !llvm.loop !44

416:                                              ; preds = %388
  br label %873

417:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #8
  store i8 1, ptr %44, align 1, !tbaa !13
  br label %418

418:                                              ; preds = %480, %417
  %419 = load i8, ptr %44, align 1, !tbaa !13, !range !15, !noundef !16
  %420 = trunc i8 %419 to i1
  br i1 %420, label %422, label %421

421:                                              ; preds = %418
  store i32 67, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #8
  br label %481

422:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %423 = load ptr, ptr %20, align 8, !tbaa !5
  %424 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %423)
  store ptr %424, ptr %45, align 8, !tbaa !5
  br label %425

425:                                              ; preds = %478, %422
  %426 = load ptr, ptr %45, align 8, !tbaa !5
  %427 = load i8, ptr %44, align 1, !tbaa !13, !range !15, !noundef !16
  %428 = trunc i8 %427 to i1
  br i1 %428, label %430, label %429

429:                                              ; preds = %425
  store i32 70, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %479

430:                                              ; preds = %425
  %431 = load ptr, ptr %8, align 8, !tbaa !5
  %432 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %431, ptr noundef @.str.24)
  %433 = load ptr, ptr %45, align 8, !tbaa !5
  %434 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %433, i32 0, i32 0
  %435 = load ptr, ptr %434, align 8, !tbaa !45
  %436 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPKv(ptr noundef nonnull align 8 dereferenceable(8) %432, ptr noundef %435)
  %437 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %436, ptr noundef @.str.25)
  %438 = load ptr, ptr %8, align 8, !tbaa !5
  %439 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %438, ptr noundef @.str.26)
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %440 = load ptr, ptr %45, align 8, !tbaa !5
  %441 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %440, i32 0, i32 0
  %442 = load ptr, ptr %441, align 8, !tbaa !45
  %443 = getelementptr inbounds %"struct.HIR::ExprNode_Closure", ptr %442, i32 0, i32 1
  store ptr %443, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %444 = load ptr, ptr %46, align 8, !tbaa !5
  %445 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %444) #8
  %446 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.116", ptr %47, i32 0, i32 0
  store ptr %445, ptr %446, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %447 = load ptr, ptr %46, align 8, !tbaa !5
  %448 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %447) #8
  %449 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.116", ptr %48, i32 0, i32 0
  store ptr %448, ptr %449, align 8
  br label %450

450:                                              ; preds = %464, %430
  %451 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef nonnull align 8 dereferenceable(8) %48) #8
  br i1 %451, label %453, label %452

452:                                              ; preds = %450
  store i32 73, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  br label %466

453:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %454 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %47) #8
  store ptr %454, ptr %49, align 8, !tbaa !5
  %455 = load ptr, ptr %8, align 8, !tbaa !5
  %456 = load ptr, ptr %49, align 8, !tbaa !5
  %457 = getelementptr inbounds %"struct.std::pair", ptr %456, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %50, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %458 = getelementptr inbounds { ptr, ptr }, ptr %50, i32 0, i32 0
  %459 = load ptr, ptr %458, align 8
  %460 = getelementptr inbounds { ptr, ptr }, ptr %50, i32 0, i32 1
  %461 = load ptr, ptr %460, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %455, ptr noundef nonnull align 8 dereferenceable(8) %457, ptr %459, ptr %461)
  %462 = load ptr, ptr %8, align 8, !tbaa !5
  %463 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %462, ptr noundef @.str.27)
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  br label %464

464:                                              ; preds = %453
  %465 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %47) #8
  br label %450

466:                                              ; preds = %452
  %467 = load ptr, ptr %8, align 8, !tbaa !5
  %468 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %467, ptr noundef @.str.28)
  %469 = load ptr, ptr %8, align 8, !tbaa !5
  %470 = load ptr, ptr %45, align 8, !tbaa !5
  %471 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %470, i32 0, i32 0
  %472 = load ptr, ptr %471, align 8, !tbaa !45
  %473 = getelementptr inbounds %"struct.HIR::ExprNode_Closure", ptr %472, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %51, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %474 = getelementptr inbounds { ptr, ptr }, ptr %51, i32 0, i32 0
  %475 = load ptr, ptr %474, align 8
  %476 = getelementptr inbounds { ptr, ptr }, ptr %51, i32 0, i32 1
  %477 = load ptr, ptr %476, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %469, ptr noundef nonnull align 8 dereferenceable(8) %473, ptr %475, ptr %477)
  br label %478

478:                                              ; preds = %466
  store i8 0, ptr %44, align 1, !tbaa !13
  br label %425, !llvm.loop !47

479:                                              ; preds = %429
  br label %480

480:                                              ; preds = %479
  store i8 0, ptr %44, align 1, !tbaa !13
  br label %418, !llvm.loop !48

481:                                              ; preds = %421
  br label %873

482:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #8
  store i8 1, ptr %52, align 1, !tbaa !13
  br label %483

483:                                              ; preds = %505, %482
  %484 = load i8, ptr %52, align 1, !tbaa !13, !range !15, !noundef !16
  %485 = trunc i8 %484 to i1
  br i1 %485, label %487, label %486

486:                                              ; preds = %483
  store i32 75, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #8
  br label %506

487:                                              ; preds = %483
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %488 = load ptr, ptr %20, align 8, !tbaa !5
  %489 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %488)
  store ptr %489, ptr %53, align 8, !tbaa !5
  br label %490

490:                                              ; preds = %503, %487
  %491 = load ptr, ptr %53, align 8, !tbaa !5
  %492 = load i8, ptr %52, align 1, !tbaa !13, !range !15, !noundef !16
  %493 = trunc i8 %492 to i1
  br i1 %493, label %495, label %494

494:                                              ; preds = %490
  store i32 78, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  br label %504

495:                                              ; preds = %490
  %496 = load ptr, ptr %8, align 8, !tbaa !5
  %497 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %496, ptr noundef @.str.29)
  %498 = load ptr, ptr %53, align 8, !tbaa !5
  %499 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %498, i32 0, i32 0
  %500 = load ptr, ptr %499, align 8, !tbaa !49
  %501 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPKv(ptr noundef nonnull align 8 dereferenceable(8) %497, ptr noundef %500)
  %502 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %501, ptr noundef @.str.25)
  br label %503

503:                                              ; preds = %495
  store i8 0, ptr %52, align 1, !tbaa !13
  br label %490, !llvm.loop !51

504:                                              ; preds = %494
  br label %505

505:                                              ; preds = %504
  store i8 0, ptr %52, align 1, !tbaa !13
  br label %483, !llvm.loop !52

506:                                              ; preds = %486
  br label %873

507:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %54) #8
  store i8 1, ptr %54, align 1, !tbaa !13
  br label %508

508:                                              ; preds = %529, %507
  %509 = load i8, ptr %54, align 1, !tbaa !13, !range !15, !noundef !16
  %510 = trunc i8 %509 to i1
  br i1 %510, label %512, label %511

511:                                              ; preds = %508
  store i32 81, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %54) #8
  br label %530

512:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %513 = load ptr, ptr %20, align 8, !tbaa !5
  %514 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %513)
  store ptr %514, ptr %55, align 8, !tbaa !5
  br label %515

515:                                              ; preds = %527, %512
  %516 = load ptr, ptr %55, align 8, !tbaa !5
  %517 = load i8, ptr %54, align 1, !tbaa !13, !range !15, !noundef !16
  %518 = trunc i8 %517 to i1
  br i1 %518, label %520, label %519

519:                                              ; preds = %515
  store i32 84, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  br label %528

520:                                              ; preds = %515
  %521 = load ptr, ptr %8, align 8, !tbaa !5
  %522 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %521, ptr noundef @.str.30)
  %523 = load ptr, ptr %55, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %523, i32 0, i32 0
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_0clERKNS1_4PathE"(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(88) %524)
  %525 = load ptr, ptr %8, align 8, !tbaa !5
  %526 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %525, ptr noundef @.str.25)
  br label %527

527:                                              ; preds = %520
  store i8 0, ptr %54, align 1, !tbaa !13
  br label %515, !llvm.loop !53

528:                                              ; preds = %519
  br label %529

529:                                              ; preds = %528
  store i8 0, ptr %54, align 1, !tbaa !13
  br label %508, !llvm.loop !54

530:                                              ; preds = %511
  br label %873

531:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #8
  store i8 1, ptr %56, align 1, !tbaa !13
  br label %532

532:                                              ; preds = %601, %531
  %533 = load i8, ptr %56, align 1, !tbaa !13, !range !15, !noundef !16
  %534 = trunc i8 %533 to i1
  br i1 %534, label %536, label %535

535:                                              ; preds = %532
  store i32 87, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #8
  br label %602

536:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %537 = load ptr, ptr %20, align 8, !tbaa !5
  %538 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %537)
  store ptr %538, ptr %57, align 8, !tbaa !5
  br label %539

539:                                              ; preds = %599, %536
  %540 = load ptr, ptr %57, align 8, !tbaa !5
  %541 = load i8, ptr %56, align 1, !tbaa !13, !range !15, !noundef !16
  %542 = trunc i8 %541 to i1
  br i1 %542, label %544, label %543

543:                                              ; preds = %539
  store i32 90, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  br label %600

544:                                              ; preds = %539
  %545 = load ptr, ptr %57, align 8, !tbaa !5
  %546 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %545, i32 0, i32 1
  %547 = load i8, ptr %546, align 8, !tbaa !55, !range !15, !noundef !16
  %548 = trunc i8 %547 to i1
  br i1 %548, label %549, label %552

549:                                              ; preds = %544
  %550 = load ptr, ptr %8, align 8, !tbaa !5
  %551 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %550, ptr noundef @.str.31)
  br label %552

552:                                              ; preds = %549, %544
  %553 = load ptr, ptr %57, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %553, i32 0, i32 3
  %555 = call noundef zeroext i1 @_ZNK8RcStringneEPKc(ptr noundef nonnull align 8 dereferenceable(8) %554, ptr noundef @.str.15)
  br i1 %555, label %556, label %563

556:                                              ; preds = %552
  %557 = load ptr, ptr %8, align 8, !tbaa !5
  %558 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %557, ptr noundef @.str.32)
  %559 = load ptr, ptr %57, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %559, i32 0, i32 3
  %561 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %558, ptr noundef nonnull align 8 dereferenceable(8) %560)
  %562 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %561, ptr noundef @.str.33)
  br label %563

563:                                              ; preds = %556, %552
  %564 = load ptr, ptr %8, align 8, !tbaa !5
  %565 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %564, ptr noundef @.str.34)
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %566 = load ptr, ptr %57, align 8, !tbaa !5
  %567 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %566, i32 0, i32 5
  store ptr %567, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %568 = load ptr, ptr %58, align 8, !tbaa !5
  %569 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %568) #8
  %570 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.152", ptr %59, i32 0, i32 0
  store ptr %569, ptr %570, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %571 = load ptr, ptr %58, align 8, !tbaa !5
  %572 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %571) #8
  %573 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.152", ptr %60, i32 0, i32 0
  store ptr %572, ptr %573, align 8
  br label %574

574:                                              ; preds = %587, %563
  %575 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %60) #8
  br i1 %575, label %577, label %576

576:                                              ; preds = %574
  store i32 93, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  br label %589

577:                                              ; preds = %574
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  %578 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  store ptr %578, ptr %61, align 8, !tbaa !5
  %579 = load ptr, ptr %8, align 8, !tbaa !5
  %580 = load ptr, ptr %61, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %62, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %581 = getelementptr inbounds { ptr, ptr }, ptr %62, i32 0, i32 0
  %582 = load ptr, ptr %581, align 8
  %583 = getelementptr inbounds { ptr, ptr }, ptr %62, i32 0, i32 1
  %584 = load ptr, ptr %583, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %579, ptr noundef nonnull align 8 dereferenceable(8) %580, ptr %582, ptr %584)
  %585 = load ptr, ptr %8, align 8, !tbaa !5
  %586 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %585, ptr noundef @.str.27)
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  br label %587

587:                                              ; preds = %577
  %588 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  br label %574

589:                                              ; preds = %576
  %590 = load ptr, ptr %8, align 8, !tbaa !5
  %591 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %590, ptr noundef @.str.28)
  %592 = load ptr, ptr %8, align 8, !tbaa !5
  %593 = load ptr, ptr %57, align 8, !tbaa !5
  %594 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %593, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %63, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %595 = getelementptr inbounds { ptr, ptr }, ptr %63, i32 0, i32 0
  %596 = load ptr, ptr %595, align 8
  %597 = getelementptr inbounds { ptr, ptr }, ptr %63, i32 0, i32 1
  %598 = load ptr, ptr %597, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %592, ptr noundef nonnull align 8 dereferenceable(8) %594, ptr %596, ptr %598)
  br label %599

599:                                              ; preds = %589
  store i8 0, ptr %56, align 1, !tbaa !13
  br label %539, !llvm.loop !79

600:                                              ; preds = %543
  br label %601

601:                                              ; preds = %600
  store i8 0, ptr %56, align 1, !tbaa !13
  br label %532, !llvm.loop !80

602:                                              ; preds = %535
  br label %873

603:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #8
  store i8 1, ptr %64, align 1, !tbaa !13
  br label %604

604:                                              ; preds = %661, %603
  %605 = load i8, ptr %64, align 1, !tbaa !13, !range !15, !noundef !16
  %606 = trunc i8 %605 to i1
  br i1 %606, label %608, label %607

607:                                              ; preds = %604
  store i32 95, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #8
  br label %662

608:                                              ; preds = %604
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #8
  %609 = load ptr, ptr %20, align 8, !tbaa !5
  %610 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %609)
  store ptr %610, ptr %65, align 8, !tbaa !5
  br label %611

611:                                              ; preds = %659, %608
  %612 = load ptr, ptr %65, align 8, !tbaa !5
  %613 = load i8, ptr %64, align 1, !tbaa !13, !range !15, !noundef !16
  %614 = trunc i8 %613 to i1
  br i1 %614, label %616, label %615

615:                                              ; preds = %611
  store i32 98, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  br label %660

616:                                              ; preds = %611
  %617 = load ptr, ptr %8, align 8, !tbaa !5
  %618 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %617, ptr noundef @.str.35)
  %619 = load ptr, ptr %65, align 8, !tbaa !5
  %620 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %619, i32 0, i32 0
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_1clERKNS1_9TraitPathE"(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(144) %620)
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #8
  %621 = load ptr, ptr %65, align 8, !tbaa !5
  %622 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %621, i32 0, i32 1
  store ptr %622, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #8
  %623 = load ptr, ptr %66, align 8, !tbaa !5
  %624 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %623) #8
  %625 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.153", ptr %67, i32 0, i32 0
  store ptr %624, ptr %625, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  %626 = load ptr, ptr %66, align 8, !tbaa !5
  %627 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %626) #8
  %628 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.153", ptr %68, i32 0, i32 0
  store ptr %627, ptr %628, align 8
  br label %629

629:                                              ; preds = %642, %616
  %630 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  br i1 %630, label %632, label %631

631:                                              ; preds = %629
  store i32 101, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #8
  br label %644

632:                                              ; preds = %629
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #8
  %633 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #8
  store ptr %633, ptr %69, align 8, !tbaa !5
  %634 = load ptr, ptr %8, align 8, !tbaa !5
  %635 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %634, ptr noundef @.str.36)
  %636 = load ptr, ptr %8, align 8, !tbaa !5
  %637 = load ptr, ptr %69, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %70, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %638 = getelementptr inbounds { ptr, ptr }, ptr %70, i32 0, i32 0
  %639 = load ptr, ptr %638, align 8
  %640 = getelementptr inbounds { ptr, ptr }, ptr %70, i32 0, i32 1
  %641 = load ptr, ptr %640, align 8
  call void @_ZNK16HMTypeInferrence17print_genericpathERSoRKN3HIR11GenericPathE5LListIPKNS1_7TypeRefEE(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %636, ptr noundef nonnull align 8 dereferenceable(32) %637, ptr %639, ptr %641)
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  br label %642

642:                                              ; preds = %632
  %643 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #8
  br label %629

644:                                              ; preds = %631
  %645 = load ptr, ptr %65, align 8, !tbaa !5
  %646 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %645, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #8
  %647 = call i32 @_ZN3HIR11LifetimeRef10new_staticEv()
  %648 = getelementptr inbounds %"struct.HIR::LifetimeRef", ptr %71, i32 0, i32 0
  store i32 %647, ptr %648, align 4
  %649 = call noundef zeroext i1 @_ZNK3HIR11LifetimeRefneERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %646, ptr noundef nonnull align 4 dereferenceable(4) %71)
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  br i1 %649, label %650, label %656

650:                                              ; preds = %644
  %651 = load ptr, ptr %8, align 8, !tbaa !5
  %652 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %651, ptr noundef @.str.36)
  %653 = load ptr, ptr %65, align 8, !tbaa !5
  %654 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %653, i32 0, i32 2
  %655 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_11LifetimeRefE(ptr noundef nonnull align 8 dereferenceable(8) %652, ptr noundef nonnull align 4 dereferenceable(4) %654)
  br label %656

656:                                              ; preds = %650, %644
  %657 = load ptr, ptr %8, align 8, !tbaa !5
  %658 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %657, ptr noundef @.str.37)
  br label %659

659:                                              ; preds = %656
  store i8 0, ptr %64, align 1, !tbaa !13
  br label %611, !llvm.loop !81

660:                                              ; preds = %615
  br label %661

661:                                              ; preds = %660
  store i8 0, ptr %64, align 1, !tbaa !13
  br label %604, !llvm.loop !82

662:                                              ; preds = %607
  br label %873

663:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %72) #8
  store i8 1, ptr %72, align 1, !tbaa !13
  br label %664

664:                                              ; preds = %826, %663
  %665 = load i8, ptr %72, align 1, !tbaa !13, !range !15, !noundef !16
  %666 = trunc i8 %665 to i1
  br i1 %666, label %668, label %667

667:                                              ; preds = %664
  store i32 103, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #8
  br label %827

668:                                              ; preds = %664
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %669 = load ptr, ptr %20, align 8, !tbaa !5
  %670 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %669)
  store ptr %670, ptr %73, align 8, !tbaa !5
  br label %671

671:                                              ; preds = %824, %668
  %672 = load ptr, ptr %73, align 8, !tbaa !5
  %673 = load i8, ptr %72, align 1, !tbaa !13, !range !15, !noundef !16
  %674 = trunc i8 %673 to i1
  br i1 %674, label %676, label %675

675:                                              ; preds = %671
  store i32 106, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  br label %825

676:                                              ; preds = %671
  %677 = load ptr, ptr %8, align 8, !tbaa !5
  %678 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %677, ptr noundef @.str.38)
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %679 = load ptr, ptr %73, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %679, i32 0, i32 1
  store ptr %680, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #8
  %681 = load ptr, ptr %74, align 8, !tbaa !5
  %682 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %681) #8
  %683 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.154", ptr %75, i32 0, i32 0
  store ptr %682, ptr %683, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #8
  %684 = load ptr, ptr %74, align 8, !tbaa !5
  %685 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %684) #8
  %686 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.154", ptr %76, i32 0, i32 0
  store ptr %685, ptr %686, align 8
  br label %687

687:                                              ; preds = %702, %676
  %688 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef nonnull align 8 dereferenceable(8) %76) #8
  br i1 %688, label %690, label %689

689:                                              ; preds = %687
  store i32 109, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  br label %704

690:                                              ; preds = %687
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #8
  %691 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %75) #8
  store ptr %691, ptr %77, align 8, !tbaa !5
  %692 = load ptr, ptr %77, align 8, !tbaa !5
  %693 = load ptr, ptr %73, align 8, !tbaa !5
  %694 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %693, i32 0, i32 1
  %695 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %694, i64 noundef 0) #8
  %696 = icmp ne ptr %692, %695
  br i1 %696, label %697, label %700

697:                                              ; preds = %690
  %698 = load ptr, ptr %8, align 8, !tbaa !5
  %699 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %698, ptr noundef @.str.36)
  br label %700

700:                                              ; preds = %697, %690
  %701 = load ptr, ptr %77, align 8, !tbaa !5
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_1clERKNS1_9TraitPathE"(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(144) %701)
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #8
  br label %702

702:                                              ; preds = %700
  %703 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %75) #8
  br label %687

704:                                              ; preds = %689
  %705 = load ptr, ptr %73, align 8, !tbaa !5
  %706 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %705, i32 0, i32 2
  %707 = call noundef zeroext i1 @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %706) #8
  br i1 %707, label %729, label %708

708:                                              ; preds = %704
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #8
  %709 = load ptr, ptr %73, align 8, !tbaa !5
  %710 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %709, i32 0, i32 2
  store ptr %710, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #8
  %711 = load ptr, ptr %78, align 8, !tbaa !5
  %712 = call ptr @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %711) #8
  %713 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.155", ptr %79, i32 0, i32 0
  store ptr %712, ptr %713, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #8
  %714 = load ptr, ptr %78, align 8, !tbaa !5
  %715 = call ptr @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %714) #8
  %716 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.155", ptr %80, i32 0, i32 0
  store ptr %715, ptr %716, align 8
  br label %717

717:                                              ; preds = %726, %708
  %718 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %80) #8
  br i1 %718, label %720, label %719

719:                                              ; preds = %717
  store i32 111, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  br label %728

720:                                              ; preds = %717
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #8
  %721 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  store ptr %721, ptr %81, align 8, !tbaa !5
  %722 = load ptr, ptr %8, align 8, !tbaa !5
  %723 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %722, ptr noundef @.str.36)
  %724 = load ptr, ptr %81, align 8, !tbaa !5
  %725 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_11LifetimeRefE(ptr noundef nonnull align 8 dereferenceable(8) %723, ptr noundef nonnull align 4 dereferenceable(4) %724)
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #8
  br label %726

726:                                              ; preds = %720
  %727 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  br label %717

728:                                              ; preds = %719
  br label %729

729:                                              ; preds = %728, %704
  %730 = load ptr, ptr %8, align 8, !tbaa !5
  %731 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %730, ptr noundef @.str.39)
  call void @llvm.lifetime.start.p0(i64 1, ptr %82) #8
  store i8 1, ptr %82, align 1, !tbaa !13
  br label %732

732:                                              ; preds = %820, %729
  %733 = load i8, ptr %82, align 1, !tbaa !13, !range !15, !noundef !16
  %734 = trunc i8 %733 to i1
  br i1 %734, label %736, label %735

735:                                              ; preds = %732
  store i32 113, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %82) #8
  br label %821

736:                                              ; preds = %732
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #8
  %737 = load ptr, ptr %73, align 8, !tbaa !5
  %738 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %737, i32 0, i32 3
  store ptr %738, ptr %83, align 8, !tbaa !5
  br label %739

739:                                              ; preds = %818, %736
  %740 = load i8, ptr %82, align 1, !tbaa !13, !range !15, !noundef !16
  %741 = trunc i8 %740 to i1
  br i1 %741, label %743, label %742

742:                                              ; preds = %739
  store i32 116, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #8
  br label %819

743:                                              ; preds = %739
  %744 = load ptr, ptr %83, align 8, !tbaa !5
  %745 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %744)
  switch i32 %745, label %817 [
    i32 0, label %746
    i32 1, label %747
    i32 2, label %775
    i32 3, label %799
  ]

746:                                              ; preds = %743
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 399, ptr noundef @__PRETTY_FUNCTION__._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E) #9
  unreachable

747:                                              ; preds = %743
  call void @llvm.lifetime.start.p0(i64 1, ptr %84) #8
  store i8 1, ptr %84, align 1, !tbaa !13
  br label %748

748:                                              ; preds = %773, %747
  %749 = load i8, ptr %84, align 1, !tbaa !13, !range !15, !noundef !16
  %750 = trunc i8 %749 to i1
  br i1 %750, label %752, label %751

751:                                              ; preds = %748
  store i32 120, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %84) #8
  br label %774

752:                                              ; preds = %748
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #8
  %753 = load ptr, ptr %83, align 8, !tbaa !5
  %754 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %753)
  store ptr %754, ptr %85, align 8, !tbaa !5
  br label %755

755:                                              ; preds = %771, %752
  %756 = load ptr, ptr %85, align 8, !tbaa !5
  %757 = load i8, ptr %84, align 1, !tbaa !13, !range !15, !noundef !16
  %758 = trunc i8 %757 to i1
  br i1 %758, label %760, label %759

759:                                              ; preds = %755
  store i32 123, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #8
  br label %772

760:                                              ; preds = %755
  %761 = load ptr, ptr %8, align 8, !tbaa !5
  %762 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %761, ptr noundef @.str.40)
  %763 = load ptr, ptr %85, align 8, !tbaa !5
  %764 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %763, i32 0, i32 0
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_0clERKNS1_4PathE"(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(88) %764)
  %765 = load ptr, ptr %8, align 8, !tbaa !5
  %766 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %765, ptr noundef @.str)
  %767 = load ptr, ptr %85, align 8, !tbaa !5
  %768 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %767, i32 0, i32 1
  %769 = load i32, ptr %768, align 8, !tbaa !83
  %770 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %766, i32 noundef %769)
  br label %771

771:                                              ; preds = %760
  store i8 0, ptr %84, align 1, !tbaa !13
  br label %755, !llvm.loop !88

772:                                              ; preds = %759
  br label %773

773:                                              ; preds = %772
  store i8 0, ptr %84, align 1, !tbaa !13
  br label %748, !llvm.loop !89

774:                                              ; preds = %751
  br label %817

775:                                              ; preds = %743
  call void @llvm.lifetime.start.p0(i64 1, ptr %86) #8
  store i8 1, ptr %86, align 1, !tbaa !13
  br label %776

776:                                              ; preds = %797, %775
  %777 = load i8, ptr %86, align 1, !tbaa !13, !range !15, !noundef !16
  %778 = trunc i8 %777 to i1
  br i1 %778, label %780, label %779

779:                                              ; preds = %776
  store i32 126, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #8
  br label %798

780:                                              ; preds = %776
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #8
  %781 = load ptr, ptr %83, align 8, !tbaa !5
  %782 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %781)
  store ptr %782, ptr %87, align 8, !tbaa !5
  br label %783

783:                                              ; preds = %795, %780
  %784 = load ptr, ptr %87, align 8, !tbaa !5
  %785 = load i8, ptr %86, align 1, !tbaa !13, !range !15, !noundef !16
  %786 = trunc i8 %785 to i1
  br i1 %786, label %788, label %787

787:                                              ; preds = %783
  store i32 129, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  br label %796

788:                                              ; preds = %783
  %789 = load ptr, ptr %8, align 8, !tbaa !5
  %790 = load ptr, ptr %87, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %88, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %791 = getelementptr inbounds { ptr, ptr }, ptr %88, i32 0, i32 0
  %792 = load ptr, ptr %791, align 8
  %793 = getelementptr inbounds { ptr, ptr }, ptr %88, i32 0, i32 1
  %794 = load ptr, ptr %793, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %789, ptr noundef nonnull align 8 dereferenceable(8) %790, ptr %792, ptr %794)
  br label %795

795:                                              ; preds = %788
  store i8 0, ptr %86, align 1, !tbaa !13
  br label %783, !llvm.loop !90

796:                                              ; preds = %787
  br label %797

797:                                              ; preds = %796
  store i8 0, ptr %86, align 1, !tbaa !13
  br label %776, !llvm.loop !91

798:                                              ; preds = %779
  br label %817

799:                                              ; preds = %743
  call void @llvm.lifetime.start.p0(i64 1, ptr %89) #8
  store i8 1, ptr %89, align 1, !tbaa !13
  br label %800

800:                                              ; preds = %815, %799
  %801 = load i8, ptr %89, align 1, !tbaa !13, !range !15, !noundef !16
  %802 = trunc i8 %801 to i1
  br i1 %802, label %804, label %803

803:                                              ; preds = %800
  store i32 132, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #8
  br label %816

804:                                              ; preds = %800
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #8
  %805 = load ptr, ptr %83, align 8, !tbaa !5
  %806 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %805)
  store ptr %806, ptr %90, align 8, !tbaa !5
  br label %807

807:                                              ; preds = %813, %804
  %808 = load ptr, ptr %90, align 8, !tbaa !5
  %809 = load i8, ptr %89, align 1, !tbaa !13, !range !15, !noundef !16
  %810 = trunc i8 %809 to i1
  br i1 %810, label %812, label %811

811:                                              ; preds = %807
  store i32 135, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  br label %814

812:                                              ; preds = %807
  br label %813

813:                                              ; preds = %812
  store i8 0, ptr %89, align 1, !tbaa !13
  br label %807, !llvm.loop !92

814:                                              ; preds = %811
  br label %815

815:                                              ; preds = %814
  store i8 0, ptr %89, align 1, !tbaa !13
  br label %800, !llvm.loop !93

816:                                              ; preds = %803
  br label %817

817:                                              ; preds = %816, %798, %774, %743
  br label %818

818:                                              ; preds = %817
  store i8 0, ptr %82, align 1, !tbaa !13
  br label %739, !llvm.loop !94

819:                                              ; preds = %742
  br label %820

820:                                              ; preds = %819
  store i8 0, ptr %82, align 1, !tbaa !13
  br label %732, !llvm.loop !95

821:                                              ; preds = %735
  %822 = load ptr, ptr %8, align 8, !tbaa !5
  %823 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %822, ptr noundef @.str.41)
  br label %824

824:                                              ; preds = %821
  store i8 0, ptr %72, align 1, !tbaa !13
  br label %671, !llvm.loop !96

825:                                              ; preds = %675
  br label %826

826:                                              ; preds = %825
  store i8 0, ptr %72, align 1, !tbaa !13
  br label %664, !llvm.loop !97

827:                                              ; preds = %667
  br label %873

828:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 1, ptr %91) #8
  store i8 1, ptr %91, align 1, !tbaa !13
  br label %829

829:                                              ; preds = %871, %828
  %830 = load i8, ptr %91, align 1, !tbaa !13, !range !15, !noundef !16
  %831 = trunc i8 %830 to i1
  br i1 %831, label %833, label %832

832:                                              ; preds = %829
  store i32 138, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #8
  br label %872

833:                                              ; preds = %829
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #8
  %834 = load ptr, ptr %20, align 8, !tbaa !5
  %835 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %834)
  store ptr %835, ptr %92, align 8, !tbaa !5
  br label %836

836:                                              ; preds = %869, %833
  %837 = load ptr, ptr %92, align 8, !tbaa !5
  %838 = load i8, ptr %91, align 1, !tbaa !13, !range !15, !noundef !16
  %839 = trunc i8 %838 to i1
  br i1 %839, label %841, label %840

840:                                              ; preds = %836
  store i32 141, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #8
  br label %870

841:                                              ; preds = %836
  %842 = load ptr, ptr %8, align 8, !tbaa !5
  %843 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %842, ptr noundef @.str.26)
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  %844 = load ptr, ptr %92, align 8, !tbaa !5
  store ptr %844, ptr %93, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  %845 = load ptr, ptr %93, align 8, !tbaa !5
  %846 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %845) #8
  %847 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.152", ptr %94, i32 0, i32 0
  store ptr %846, ptr %847, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #8
  %848 = load ptr, ptr %93, align 8, !tbaa !5
  %849 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %848) #8
  %850 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.152", ptr %95, i32 0, i32 0
  store ptr %849, ptr %850, align 8
  br label %851

851:                                              ; preds = %864, %841
  %852 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef nonnull align 8 dereferenceable(8) %95) #8
  br i1 %852, label %854, label %853

853:                                              ; preds = %851
  store i32 144, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  br label %866

854:                                              ; preds = %851
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #8
  %855 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %94) #8
  store ptr %855, ptr %96, align 8, !tbaa !5
  %856 = load ptr, ptr %8, align 8, !tbaa !5
  %857 = load ptr, ptr %96, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %97, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !34
  %858 = getelementptr inbounds { ptr, ptr }, ptr %97, i32 0, i32 0
  %859 = load ptr, ptr %858, align 8
  %860 = getelementptr inbounds { ptr, ptr }, ptr %97, i32 0, i32 1
  %861 = load ptr, ptr %860, align 8
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %100, ptr noundef nonnull align 8 dereferenceable(8) %856, ptr noundef nonnull align 8 dereferenceable(8) %857, ptr %859, ptr %861)
  %862 = load ptr, ptr %8, align 8, !tbaa !5
  %863 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %862, ptr noundef @.str.27)
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  br label %864

864:                                              ; preds = %854
  %865 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %94) #8
  br label %851

866:                                              ; preds = %853
  %867 = load ptr, ptr %8, align 8, !tbaa !5
  %868 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %867, ptr noundef @.str.37)
  br label %869

869:                                              ; preds = %866
  store i8 0, ptr %91, align 1, !tbaa !13
  br label %836, !llvm.loop !98

870:                                              ; preds = %840
  br label %871

871:                                              ; preds = %870
  store i8 0, ptr %91, align 1, !tbaa !13
  br label %829, !llvm.loop !99

872:                                              ; preds = %832
  br label %873

873:                                              ; preds = %872, %827, %662, %602, %530, %506, %481, %416, %383, %354, %316, %266, %246, %225, %204, %183, %159
  br label %874

874:                                              ; preds = %873
  store i8 0, ptr %19, align 1, !tbaa !13
  br label %155, !llvm.loop !100

875:                                              ; preds = %158
  br label %876

876:                                              ; preds = %875
  store i8 0, ptr %19, align 1, !tbaa !13
  br label %148, !llvm.loop !101

877:                                              ; preds = %151
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #8
  store i32 0, ptr %14, align 4
  br label %878

878:                                              ; preds = %877, %136
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  %879 = load i32, ptr %14, align 4
  switch i32 %879, label %881 [
    i32 0, label %880
    i32 1, label %880
  ]

880:                                              ; preds = %878, %878
  ret void

881:                                              ; preds = %878
  unreachable
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { ptr, ptr } @_ZNK5LListIPKN3HIR7TypeRefEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, ptr } @_ZNK5LListIPKN3HIR7TypeRefEE3endEv(ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_0clERKNS1_4PathE"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(88)) #2 align 2

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

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

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_9ArraySizeE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #1

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

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

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

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

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

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_1clERKNS1_9TraitPathE"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(144)) #2 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZN3HIR11LifetimeRef10new_staticEv() #4 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

%struct.LList = type { ptr, ptr }
%class.anon.91 = type { ptr, ptr, ptr }
%class.anon.92 = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.__gnu_cxx::__normal_iterator.116" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.152" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.153" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.154" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.155" = type { ptr }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E = external hidden unnamed_addr constant [113 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [3 x i8], align 1
@switch.table._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E = private unnamed_addr constant [3 x ptr] [ptr @.str.18, ptr @.str.19, ptr @.str.20], align 8
@switch.table._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E.1 = private unnamed_addr constant [3 x ptr] [ptr @.str.15, ptr @.str.16, ptr @.str.17], align 8

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr %3, ptr %4) local_unnamed_addr #4 align 2 {
  %6 = alloca %struct.LList, align 8
  %7 = alloca %struct.LList, align 8
  %8 = alloca %struct.LList, align 8
  %9 = alloca %struct.LList, align 8
  %10 = alloca %class.anon.91, align 8
  %11 = alloca %class.anon.92, align 8
  %12 = alloca %"struct.HIR::LifetimeRef", align 4
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.116", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.116", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.153", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.153", align 8
  %19 = alloca %"struct.HIR::LifetimeRef", align 4
  %20 = alloca %"class.__gnu_cxx::__normal_iterator.154", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.154", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator.155", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator.155", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator.152", align 8
  store ptr %3, ptr %6, align 8
  %26 = getelementptr inbounds i8, ptr %6, i64 8
  store ptr %4, ptr %26, align 8
  %27 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %2)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #7
  %28 = call { ptr, ptr } @_ZNK5LListIPKN3HIR7TypeRefEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %29 = extractvalue { ptr, ptr } %28, 0
  store ptr %29, ptr %7, align 8
  %30 = getelementptr inbounds i8, ptr %7, i64 8
  %31 = extractvalue { ptr, ptr } %28, 1
  store ptr %31, ptr %30, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #7
  %32 = call { ptr, ptr } @_ZNK5LListIPKN3HIR7TypeRefEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %33 = extractvalue { ptr, ptr } %32, 0
  store ptr %33, ptr %8, align 8
  %34 = getelementptr inbounds i8, ptr %8, i64 8
  %35 = extractvalue { ptr, ptr } %32, 1
  store ptr %35, ptr %34, align 8
  %36 = call noundef zeroext i1 @_ZN5LListIPKN3HIR7TypeRefEEneERKS4_(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %8)
  br i1 %36, label %.lr.ph, label %.lr.ph728

.lr.ph:                                           ; preds = %5, %41
  %37 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5LListIPKN3HIR7TypeRefEEdeEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
  %38 = load ptr, ptr %37, align 8, !tbaa !5
  %39 = icmp eq ptr %38, %27
  br i1 %39, label %.critedge, label %41

.critedge:                                        ; preds = %.lr.ph
  %40 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.12)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  br label %202

41:                                               ; preds = %.lr.ph
  call void @_ZN5LListIPKN3HIR7TypeRefEEppEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
  %42 = call noundef zeroext i1 @_ZN5LListIPKN3HIR7TypeRefEEneERKS4_(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %8)
  br i1 %42, label %.lr.ph, label %.lr.ph728

.loopexit327:                                     ; preds = %.lr.ph728, %.preheader295, %.preheader297, %.preheader299, %.preheader301, %.preheader303, %..loopexit284_crit_edge, %..loopexit285_crit_edge, %.preheader309, %.preheader311, %.preheader315, %.preheader317, %..loopexit294_crit_edge, %..loopexit288_crit_edge, %..loopexit291_crit_edge, %..loopexit292_crit_edge, %..loopexit278_crit_edge
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #7
  br label %202

.lr.ph728:                                        ; preds = %41, %5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #7
  call void @_ZN5LListIPKN3HIR7TypeRefEEC2EPKS4_S3_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull %6, ptr noundef nonnull %27)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #7
  store ptr %1, ptr %10, align 8, !tbaa !5
  %43 = getelementptr inbounds i8, ptr %10, i64 8
  store ptr %0, ptr %43, align 8, !tbaa !9
  %44 = getelementptr inbounds i8, ptr %10, i64 16
  store ptr %9, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #7
  store ptr %0, ptr %11, align 8, !tbaa !11
  %45 = getelementptr inbounds i8, ptr %11, i64 8
  store ptr %1, ptr %45, align 8, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %11, i64 16
  store ptr %9, ptr %46, align 8, !tbaa !5
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  %47 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %27)
  %48 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  switch i32 %48, label %.loopexit327 [
    i32 0, label %89
    i32 1, label %.preheader295
    i32 3, label %.preheader297
    i32 2, label %.preheader299
    i32 5, label %.preheader301
    i32 4, label %.preheader303
    i32 11, label %.preheader305
    i32 12, label %.preheader307
    i32 9, label %.preheader309
    i32 8, label %.preheader311
    i32 15, label %.lr.ph453
    i32 16, label %.preheader315
    i32 13, label %.preheader317
    i32 14, label %.lr.ph411
    i32 6, label %.lr.ph405
    i32 7, label %.lr.ph399
    i32 10, label %.preheader325
  ]

.preheader325:                                    ; preds = %.lr.ph728
  %49 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %50 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.26)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #7
  %51 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %49) #7
  store ptr %51, ptr %24, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #7
  %52 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %49) #7
  store ptr %52, ptr %25, align 8
  %53 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #7
  br i1 %53, label %.lr.ph329, label %..loopexit294_crit_edge

.preheader317:                                    ; preds = %.lr.ph728
  %54 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %55 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.30)
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_0clERKNS1_4PathE"(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(88) %54)
  %56 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.25)
  br label %.loopexit327

.preheader315:                                    ; preds = %.lr.ph728
  %57 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %58 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.29)
  %59 = load ptr, ptr %57, align 8, !tbaa !13
  %60 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPKv(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef %59)
  %61 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef nonnull @.str.25)
  br label %.loopexit327

.preheader311:                                    ; preds = %.lr.ph728
  %62 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %63 = getelementptr inbounds i8, ptr %62, i64 8
  %64 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.21)
  %.sroa.090.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.291.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %62, ptr %.sroa.090.0.copyload, ptr %.sroa.291.0.copyload)
  %65 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.23)
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_9ArraySizeE(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 8 dereferenceable(32) %63)
  %67 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %66, ptr noundef nonnull @.str.22)
  br label %.loopexit327

.preheader309:                                    ; preds = %.lr.ph728
  %68 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.21)
  %.sroa.097.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.298.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %68, ptr %.sroa.097.0.copyload, ptr %.sroa.298.0.copyload)
  %70 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.22)
  br label %.loopexit327

.preheader307:                                    ; preds = %.lr.ph728
  %71 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %72 = getelementptr inbounds i8, ptr %71, i64 8
  %73 = load i32, ptr %71, align 8, !tbaa !15
  %74 = icmp ult i32 %73, 3
  br i1 %74, label %switch.lookup, label %..loopexit285_crit_edge

.preheader305:                                    ; preds = %.lr.ph728
  %75 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %76 = getelementptr inbounds i8, ptr %75, i64 4
  %77 = getelementptr inbounds i8, ptr %75, i64 8
  %78 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.14)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #7
  call void @_ZN3HIR11LifetimeRefC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %12)
  %79 = call noundef zeroext i1 @_ZNK3HIR11LifetimeRefneERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %75, ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  br i1 %79, label %90, label %93

.preheader303:                                    ; preds = %.lr.ph728
  %80 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_0clERKNS1_4PathE"(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(88) %80)
  br label %.loopexit327

.preheader301:                                    ; preds = %.lr.ph728
  %81 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %27)
  br label %.loopexit327

.preheader299:                                    ; preds = %.lr.ph728
  %83 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %27)
  br label %.loopexit327

.preheader297:                                    ; preds = %.lr.ph728
  %85 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %27)
  br label %.loopexit327

.preheader295:                                    ; preds = %.lr.ph728
  %87 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %27)
  br label %.loopexit327

89:                                               ; preds = %.lr.ph728
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 301, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E) #8
  unreachable

90:                                               ; preds = %.preheader305
  %91 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_11LifetimeRefE(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(4) %75)
  %92 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull @.str.4)
  br label %93

93:                                               ; preds = %90, %.preheader305
  %94 = load i32, ptr %76, align 4, !tbaa !19
  %95 = icmp ult i32 %94, 3
  br i1 %95, label %switch.lookup731, label %..loopexit284_crit_edge

switch.lookup731:                                 ; preds = %93
  %96 = zext nneg i32 %94 to i64
  %switch.gep732 = getelementptr inbounds [3 x ptr], ptr @switch.table._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E.1, i64 0, i64 %96
  %switch.load733 = load ptr, ptr %switch.gep732, align 8
  %97 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull %switch.load733)
  br label %..loopexit284_crit_edge

..loopexit284_crit_edge:                          ; preds = %93, %switch.lookup731
  %.sroa.0110.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.2111.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %77, ptr %.sroa.0110.0.copyload, ptr %.sroa.2111.0.copyload)
  br label %.loopexit327

switch.lookup:                                    ; preds = %.preheader307
  %98 = zext nneg i32 %73 to i64
  %switch.gep = getelementptr inbounds [3 x ptr], ptr @switch.table._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E, i64 0, i64 %98
  %switch.load = load ptr, ptr %switch.gep, align 8
  %99 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull %switch.load)
  br label %..loopexit285_crit_edge

..loopexit285_crit_edge:                          ; preds = %.preheader307, %switch.lookup
  %.sroa.0103.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.2104.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %72, ptr %.sroa.0103.0.copyload, ptr %.sroa.2104.0.copyload)
  br label %.loopexit327

.lr.ph453:                                        ; preds = %.lr.ph728
  %100 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.24)
  %102 = load ptr, ptr %100, align 8, !tbaa !23
  %103 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPKv(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef %102)
  %104 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %103, ptr noundef nonnull @.str.25)
  %105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.26)
  %106 = load ptr, ptr %100, align 8, !tbaa !23
  %107 = getelementptr inbounds i8, ptr %106, i64 32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %108 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %107) #7
  store ptr %108, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %109 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %107) #7
  store ptr %109, ptr %14, align 8
  %110 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  br i1 %110, label %.lr.ph450, label %..loopexit288_crit_edge

..loopexit288_crit_edge:                          ; preds = %.lr.ph450, %.lr.ph453
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  %111 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.28)
  %112 = load ptr, ptr %100, align 8, !tbaa !23
  %113 = getelementptr inbounds i8, ptr %112, i64 56
  %.sroa.077.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.278.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %113, ptr %.sroa.077.0.copyload, ptr %.sroa.278.0.copyload)
  br label %.loopexit327

.lr.ph450:                                        ; preds = %.lr.ph453, %.lr.ph450
  %114 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  %115 = getelementptr inbounds i8, ptr %114, i64 216
  %.sroa.079.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.280.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %115, ptr %.sroa.079.0.copyload, ptr %.sroa.280.0.copyload)
  %116 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.27)
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  %118 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  br i1 %118, label %.lr.ph450, label %..loopexit288_crit_edge

.lr.ph411:                                        ; preds = %.lr.ph728
  %119 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %120 = getelementptr inbounds i8, ptr %119, i64 96
  %121 = getelementptr inbounds i8, ptr %119, i64 104
  %122 = getelementptr inbounds i8, ptr %119, i64 120
  %123 = getelementptr inbounds i8, ptr %119, i64 112
  %124 = load i8, ptr %120, align 8, !tbaa !25, !range !50, !noundef !51
  %125 = trunc nuw i8 %124 to i1
  br i1 %125, label %126, label %128

126:                                              ; preds = %.lr.ph411
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.31)
  br label %128

128:                                              ; preds = %126, %.lr.ph411
  %129 = call noundef zeroext i1 @_ZNK8RcStringneEPKc(ptr noundef nonnull align 8 dereferenceable(8) %121, ptr noundef nonnull @.str.15)
  br i1 %129, label %130, label %134

130:                                              ; preds = %128
  %131 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.32)
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %131, ptr noundef nonnull align 8 dereferenceable(8) %121)
  %133 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %132, ptr noundef nonnull @.str.33)
  br label %134

134:                                              ; preds = %130, %128
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.34)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %136 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %122) #7
  store ptr %136, ptr %15, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  %137 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %122) #7
  store ptr %137, ptr %16, align 8
  %138 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  br i1 %138, label %.lr.ph408, label %..loopexit291_crit_edge

..loopexit291_crit_edge:                          ; preds = %.lr.ph408, %134
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  %139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.28)
  %.sroa.054.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.255.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %123, ptr %.sroa.054.0.copyload, ptr %.sroa.255.0.copyload)
  br label %.loopexit327

.lr.ph408:                                        ; preds = %134, %.lr.ph408
  %140 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  %.sroa.056.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.257.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %140, ptr %.sroa.056.0.copyload, ptr %.sroa.257.0.copyload)
  %141 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.27)
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  %143 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  br i1 %143, label %.lr.ph408, label %..loopexit291_crit_edge

.lr.ph405:                                        ; preds = %.lr.ph728
  %144 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %145 = getelementptr inbounds i8, ptr %144, i64 144
  %146 = getelementptr inbounds i8, ptr %144, i64 168
  %147 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.35)
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_1clERKNS1_9TraitPathE"(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(144) %144)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #7
  %148 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %145) #7
  store ptr %148, ptr %17, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  %149 = call ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %145) #7
  store ptr %149, ptr %18, align 8
  %150 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  br i1 %150, label %.lr.ph402, label %._crit_edge403

._crit_edge403:                                   ; preds = %.lr.ph402, %.lr.ph405
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  %151 = call i32 @_ZN3HIR11LifetimeRef10new_staticEv()
  store i32 %151, ptr %19, align 4
  %152 = call noundef zeroext i1 @_ZNK3HIR11LifetimeRefneERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %146, ptr noundef nonnull align 4 dereferenceable(4) %19)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  br i1 %152, label %157, label %..loopexit292_crit_edge

.lr.ph402:                                        ; preds = %.lr.ph405, %.lr.ph402
  %153 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  %154 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.36)
  %.sroa.042.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.243.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence17print_genericpathERSoRKN3HIR11GenericPathE5LListIPKNS1_7TypeRefEE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(32) %153, ptr %.sroa.042.0.copyload, ptr %.sroa.243.0.copyload)
  %155 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  %156 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  br i1 %156, label %.lr.ph402, label %._crit_edge403

157:                                              ; preds = %._crit_edge403
  %158 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.36)
  %159 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_11LifetimeRefE(ptr noundef nonnull align 8 dereferenceable(8) %158, ptr noundef nonnull align 4 dereferenceable(4) %146)
  br label %..loopexit292_crit_edge

..loopexit292_crit_edge:                          ; preds = %157, %._crit_edge403
  %160 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.37)
  br label %.loopexit327

.lr.ph399:                                        ; preds = %.lr.ph728
  %161 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %162 = getelementptr inbounds i8, ptr %161, i64 8
  %163 = getelementptr inbounds i8, ptr %161, i64 32
  %164 = getelementptr inbounds i8, ptr %161, i64 56
  %165 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.38)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  %166 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %162) #7
  store ptr %166, ptr %20, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  %167 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %162) #7
  store ptr %167, ptr %21, align 8
  %168 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  br i1 %168, label %.lr.ph342, label %._crit_edge343

._crit_edge343:                                   ; preds = %174, %.lr.ph399
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  %169 = call noundef zeroext i1 @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %163) #7
  br i1 %169, label %.split386, label %177

.lr.ph342:                                        ; preds = %.lr.ph399, %174
  %170 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #7
  %171 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %162, i64 noundef 0) #7
  %.not268 = icmp eq ptr %170, %171
  br i1 %.not268, label %174, label %172

172:                                              ; preds = %.lr.ph342
  %173 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.36)
  br label %174

174:                                              ; preds = %172, %.lr.ph342
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_1clERKNS1_9TraitPathE"(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(144) %170)
  %175 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #7
  %176 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  br i1 %176, label %.lr.ph342, label %._crit_edge343

177:                                              ; preds = %._crit_edge343
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  %178 = call ptr @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %163) #7
  store ptr %178, ptr %22, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #7
  %179 = call ptr @_ZNKSt6vectorIN3HIR11LifetimeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %163) #7
  store ptr %179, ptr %23, align 8
  %180 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  br i1 %180, label %.lr.ph345, label %._crit_edge346

._crit_edge346:                                   ; preds = %.lr.ph345, %177
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  br label %.split386

.lr.ph345:                                        ; preds = %177, %.lr.ph345
  %181 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #7
  %182 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.36)
  %183 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_11LifetimeRefE(ptr noundef nonnull align 8 dereferenceable(8) %182, ptr noundef nonnull align 4 dereferenceable(4) %181)
  %184 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #7
  %185 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR11LifetimeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  br i1 %185, label %.lr.ph345, label %._crit_edge346

.split386:                                        ; preds = %._crit_edge346, %._crit_edge343
  %186 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.39)
  %187 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %164)
  switch i32 %187, label %..loopexit278_crit_edge [
    i32 0, label %.split377
    i32 1, label %.preheader
    i32 2, label %.preheader274
    i32 3, label %.preheader276
  ]

.preheader276:                                    ; preds = %.split386
  %188 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %164)
  br label %..loopexit278_crit_edge

.preheader274:                                    ; preds = %.split386
  %189 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %164)
  %.sroa.010.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.211.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %189, ptr %.sroa.010.0.copyload, ptr %.sroa.211.0.copyload)
  br label %..loopexit278_crit_edge

.preheader:                                       ; preds = %.split386
  %190 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %164)
  %191 = getelementptr inbounds i8, ptr %190, i64 88
  %192 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.40)
  call void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_0clERKNS1_4PathE"(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(88) %190)
  %193 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str)
  %194 = load i32, ptr %191, align 8, !tbaa !52
  %195 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %193, i32 noundef %194)
  br label %..loopexit278_crit_edge

.split377:                                        ; preds = %.split386
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 399, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E) #8
  unreachable

..loopexit278_crit_edge:                          ; preds = %.preheader276, %.preheader274, %.preheader, %.split386
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.41)
  br label %.loopexit327

..loopexit294_crit_edge:                          ; preds = %.lr.ph329, %.preheader325
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #7
  %197 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.37)
  br label %.loopexit327

.lr.ph329:                                        ; preds = %.preheader325, %.lr.ph329
  %198 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  %.sroa.0.0.copyload = load ptr, ptr %9, align 8, !tbaa !5
  %.sroa.2.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !5
  call void @_ZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_E(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %198, ptr %.sroa.0.0.copyload, ptr %.sroa.2.0.copyload)
  %199 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str.27)
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  %201 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #7
  br i1 %201, label %.lr.ph329, label %..loopexit294_crit_edge

202:                                              ; preds = %.critedge, %.loopexit327
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { ptr, ptr } @_ZNK5LListIPKN3HIR7TypeRefEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, ptr } @_ZNK5LListIPKN3HIR7TypeRefEE3endEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_0clERKNS1_4PathE"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #2 align 2

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

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_9ArraySizeE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

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

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

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

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

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

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EENK3$_1clERKNS1_9TraitPathE"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #2 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZN3HIR11LifetimeRef10new_staticEv() local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { 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 #7 = { nounwind }
attributes #8 = { 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, !6, i64 8}
!10 = !{!"_ZTSZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EE3$_1", !6, i64 0, !6, i64 8, !6, i64 16}
!11 = !{!12, !6, i64 0}
!12 = !{!"_ZTSZNK16HMTypeInferrence10print_typeERSoRKN3HIR7TypeRefE5LListIPS3_EE3$_0", !6, i64 0, !6, i64 8, !6, i64 16}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !6, i64 0}
!15 = !{!16, !17, i64 0}
!16 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !17, i64 0, !18, i64 8}
!17 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!18 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!19 = !{!20, !17, i64 4}
!20 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !21, i64 0, !17, i64 4, !18, i64 8}
!21 = !{!"_ZTSN3HIR11LifetimeRefE", !22, i64 0}
!22 = !{!"int", !7, i64 0}
!23 = !{!24, !6, i64 0}
!24 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !6, i64 0}
!25 = !{!26, !44, i64 96}
!26 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !27, i64 0, !44, i64 96, !44, i64 97, !45, i64 104, !18, i64 112, !46, i64 120}
!27 = !{!"_ZTSN3HIR13GenericParamsE", !28, i64 0, !32, i64 24, !36, i64 48, !40, i64 72}
!28 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!32 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!36 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!44 = !{!"bool", !7, i64 0}
!45 = !{!"_ZTS8RcString", !6, i64 0}
!46 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!50 = !{i8 0, i8 2}
!51 = !{}
!52 = !{!53, !22, i64 88}
!53 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner8Data_FcnE", !54, i64 0, !22, i64 88}
!54 = !{!"_ZTSN3HIR4PathE", !55, i64 0}
!55 = !{!"_ZTSN3HIR4Path4DataE", !56, i64 0, !7, i64 8}
!56 = !{!"_ZTSN3HIR4Path4Data3TagE", !7, i64 0}


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