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

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

%"class.std::vector.156" = type { %"struct.std::_Vector_base.157" }
%"struct.std::_Vector_base.157" = type { %"struct.std::_Vector_base<const HIR::TypeRef *, std::allocator<const HIR::TypeRef *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::TypeRef *, std::allocator<const HIR::TypeRef *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::TypeRef *, std::allocator<const HIR::TypeRef *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::TypeRef *, std::allocator<const HIR::TypeRef *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeRef" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.161" = type { ptr }
%struct._ = type { i8 }
%"class.__gnu_cxx::__normal_iterator.162" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.163" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.164" = 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::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_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::LifetimeRef" = type { i32 }
%"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] }>
%"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_Slice" = type { %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }
%"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 }

@__dso_handle = external hidden global i8
@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack = external hidden thread_local global %"class.std::vector.156", align 8
@_ZGVZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack = external hidden thread_local global i8, align 1
@__PRETTY_FUNCTION__._ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE = external hidden unnamed_addr constant [54 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 i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1) #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %"class.__gnu_cxx::__normal_iterator.161", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.161", align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca %struct._, align 1
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca %"class.HIR::TypeRef", 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 ptr, align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.162", align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator.162", align 8
  %32 = alloca ptr, align 8
  %33 = alloca i8, align 1
  %34 = alloca ptr, align 8
  %35 = alloca i8, align 1
  %36 = alloca ptr, align 8
  %37 = alloca i8, align 1
  %38 = alloca ptr, align 8
  %39 = alloca i8, align 1
  %40 = alloca ptr, align 8
  %41 = alloca i8, align 1
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator.163", align 8
  %45 = alloca %"class.__gnu_cxx::__normal_iterator.163", align 8
  %46 = alloca ptr, align 8
  %47 = alloca i8, align 1
  %48 = alloca ptr, align 8
  %49 = alloca i8, align 1
  %50 = alloca ptr, align 8
  %51 = alloca i8, align 1
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca %"class.__gnu_cxx::__normal_iterator.164", align 8
  %55 = alloca %"class.__gnu_cxx::__normal_iterator.164", align 8
  %56 = alloca ptr, align 8
  %57 = alloca i8, align 1
  %58 = alloca ptr, align 8
  %59 = alloca i8, align 1
  %60 = alloca ptr, align 8
  %61 = alloca i8, align 1
  %62 = alloca ptr, align 8
  %63 = alloca i8, align 1
  %64 = alloca ptr, align 8
  %65 = alloca ptr, align 8
  %66 = alloca %"class.__gnu_cxx::__normal_iterator.164", align 8
  %67 = alloca %"class.__gnu_cxx::__normal_iterator.164", align 8
  %68 = alloca ptr, align 8
  %69 = alloca i8, align 1
  %70 = alloca ptr, align 8
  %71 = alloca i8, align 1
  %72 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %73 = load ptr, ptr %3, align 8
  %74 = load i8, ptr @_ZGVZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack, align 1
  %75 = icmp eq i8 %74, 0
  br i1 %75, label %76, label %78, !prof !9

76:                                               ; preds = %2
  call void @_ZNSt6vectorIPKN3HIR7TypeRefESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack) #6
  %77 = call i32 @__cxa_thread_atexit(ptr @_ZNSt6vectorIPKN3HIR7TypeRefESaIS3_EED2Ev, ptr @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack, ptr @__dso_handle) #6
  store i8 1, ptr @_ZGVZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack, align 1
  br label %78

78:                                               ; preds = %76, %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %79 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack)
  store ptr %79, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = call ptr @_ZNSt6vectorIPKN3HIR7TypeRefESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %80) #6
  %82 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.161", ptr %6, i32 0, i32 0
  store ptr %81, ptr %82, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = call ptr @_ZNSt6vectorIPKN3HIR7TypeRefESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #6
  %85 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.161", ptr %7, i32 0, i32 0
  store ptr %84, ptr %85, align 8
  br label %86

86:                                               ; preds = %100, %78
  %87 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPKN3HIR7TypeRefESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #6
  br i1 %87, label %89, label %88

88:                                               ; preds = %86
  store i32 2, ptr %8, align 4
  br label %102

89:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %90 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPKN3HIR7TypeRefESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  %91 = load ptr, ptr %90, align 8, !tbaa !5
  store ptr %91, ptr %9, align 8, !tbaa !5
  %92 = load ptr, ptr %9, align 8, !tbaa !5
  %93 = load ptr, ptr %4, align 8, !tbaa !5
  %94 = icmp eq ptr %92, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %89
  store i32 1, ptr %8, align 4
  br label %97

96:                                               ; preds = %89
  store i32 0, ptr %8, align 4
  br label %97

97:                                               ; preds = %96, %95
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  %98 = load i32, ptr %8, align 4
  switch i32 %98, label %102 [
    i32 0, label %99
  ]

99:                                               ; preds = %97
  br label %100

100:                                              ; preds = %99
  %101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPKN3HIR7TypeRefESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  br label %86

102:                                              ; preds = %97, %88
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  %103 = load i32, ptr %8, align 4
  switch i32 %103, label %755 [
    i32 2, label %104
    i32 1, label %749
  ]

104:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #6
  %105 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_C2EPKS1_(ptr noundef nonnull align 1 dereferenceable(1) %10, ptr noundef %105)
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #6
  store i8 1, ptr %11, align 1, !tbaa !10
  br label %106

106:                                              ; preds = %747, %104
  %107 = load i8, ptr %11, align 1, !tbaa !10, !range !12, !noundef !13
  %108 = trunc i8 %107 to i1
  br i1 %108, label %110, label %109

109:                                              ; preds = %106
  store i32 4, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #6
  br label %748

110:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  %112 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZN3HIR7TypeRef8data_mutEv(ptr noundef nonnull align 8 dereferenceable(8) %111)
          to label %113 unwind label %118

113:                                              ; preds = %110
  store ptr %112, ptr %12, align 8, !tbaa !5
  br label %114

114:                                              ; preds = %744, %113
  %115 = load i8, ptr %11, align 1, !tbaa !10, !range !12, !noundef !13
  %116 = trunc i8 %115 to i1
  br i1 %116, label %122, label %117

117:                                              ; preds = %114
  store i32 7, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %746

118:                                              ; preds = %122, %110
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %13, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %14, align 4
  br label %745

122:                                              ; preds = %114
  %123 = load ptr, ptr %12, align 8, !tbaa !5
  %124 = invoke noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %123)
          to label %125 unwind label %118

125:                                              ; preds = %122
  switch i32 %124, label %743 [
    i32 0, label %126
    i32 1, label %127
    i32 2, label %178
    i32 3, label %201
    i32 4, label %224
    i32 5, label %250
    i32 6, label %273
    i32 7, label %325
    i32 8, label %473
    i32 9, label %499
    i32 10, label %525
    i32 11, label %570
    i32 12, label %596
    i32 13, label %622
    i32 14, label %648
    i32 15, label %697
    i32 16, label %720
  ]

126:                                              ; preds = %125
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 487, ptr noundef @__PRETTY_FUNCTION__._ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE) #8
  unreachable

127:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #6
  store i8 1, ptr %15, align 1, !tbaa !10
  br label %128

128:                                              ; preds = %176, %127
  %129 = load i8, ptr %15, align 1, !tbaa !10, !range !12, !noundef !13
  %130 = trunc i8 %129 to i1
  br i1 %130, label %132, label %131

131:                                              ; preds = %128
  store i32 11, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  br label %177

132:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %133 = load ptr, ptr %12, align 8, !tbaa !5
  %134 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
          to label %135 unwind label %141

135:                                              ; preds = %132
  store ptr %134, ptr %16, align 8, !tbaa !5
  br label %136

136:                                              ; preds = %172, %135
  %137 = load ptr, ptr %16, align 8, !tbaa !5
  %138 = load i8, ptr %15, align 1, !tbaa !10, !range !12, !noundef !13
  %139 = trunc i8 %138 to i1
  br i1 %139, label %145, label %140

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

141:                                              ; preds = %132
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %13, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %14, align 4
  br label %174

145:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %146 = load ptr, ptr %4, align 8, !tbaa !5
  %147 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %146)
          to label %148 unwind label %158

148:                                              ; preds = %145
  store ptr %147, ptr %17, align 8, !tbaa !5
  %149 = load ptr, ptr %17, align 8, !tbaa !5
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = icmp ne ptr %149, %150
  br i1 %151, label %152, label %171

152:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %153 = load ptr, ptr %17, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %18, ptr noundef nonnull align 8 dereferenceable(8) %153)
          to label %154 unwind label %162

154:                                              ; preds = %152
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %155, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %157 unwind label %166

157:                                              ; preds = %154
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %171

158:                                              ; preds = %145
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %13, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %14, align 4
  br label %173

162:                                              ; preds = %152
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %13, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %14, align 4
  br label %170

166:                                              ; preds = %154
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %13, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %14, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  br label %170

170:                                              ; preds = %166, %162
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %173

171:                                              ; preds = %157, %148
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %172

172:                                              ; preds = %171
  store i8 0, ptr %15, align 1, !tbaa !10
  br label %136, !llvm.loop !14

173:                                              ; preds = %170, %158
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %174

174:                                              ; preds = %173, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  br label %745

175:                                              ; preds = %140
  br label %176

176:                                              ; preds = %175
  store i8 0, ptr %15, align 1, !tbaa !10
  br label %128, !llvm.loop !16

177:                                              ; preds = %131
  br label %743

178:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #6
  store i8 1, ptr %19, align 1, !tbaa !10
  br label %179

179:                                              ; preds = %199, %178
  %180 = load i8, ptr %19, align 1, !tbaa !10, !range !12, !noundef !13
  %181 = trunc i8 %180 to i1
  br i1 %181, label %183, label %182

182:                                              ; preds = %179
  store i32 17, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #6
  br label %200

183:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %184 = load ptr, ptr %12, align 8, !tbaa !5
  %185 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %184)
          to label %186 unwind label %192

186:                                              ; preds = %183
  store ptr %185, ptr %20, align 8, !tbaa !5
  br label %187

187:                                              ; preds = %197, %186
  %188 = load ptr, ptr %20, align 8, !tbaa !5
  %189 = load i8, ptr %19, align 1, !tbaa !10, !range !12, !noundef !13
  %190 = trunc i8 %189 to i1
  br i1 %190, label %196, label %191

191:                                              ; preds = %187
  store i32 20, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %198

192:                                              ; preds = %183
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %13, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #6
  br label %745

196:                                              ; preds = %187
  br label %197

197:                                              ; preds = %196
  store i8 0, ptr %19, align 1, !tbaa !10
  br label %187, !llvm.loop !17

198:                                              ; preds = %191
  br label %199

199:                                              ; preds = %198
  store i8 0, ptr %19, align 1, !tbaa !10
  br label %179, !llvm.loop !18

200:                                              ; preds = %182
  br label %743

201:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #6
  store i8 1, ptr %21, align 1, !tbaa !10
  br label %202

202:                                              ; preds = %222, %201
  %203 = load i8, ptr %21, align 1, !tbaa !10, !range !12, !noundef !13
  %204 = trunc i8 %203 to i1
  br i1 %204, label %206, label %205

205:                                              ; preds = %202
  store i32 23, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #6
  br label %223

206:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %207 = load ptr, ptr %12, align 8, !tbaa !5
  %208 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %207)
          to label %209 unwind label %215

209:                                              ; preds = %206
  store ptr %208, ptr %22, align 8, !tbaa !5
  br label %210

210:                                              ; preds = %220, %209
  %211 = load ptr, ptr %22, align 8, !tbaa !5
  %212 = load i8, ptr %21, align 1, !tbaa !10, !range !12, !noundef !13
  %213 = trunc i8 %212 to i1
  br i1 %213, label %219, label %214

214:                                              ; preds = %210
  store i32 26, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %221

215:                                              ; preds = %206
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %13, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #6
  br label %745

219:                                              ; preds = %210
  br label %220

220:                                              ; preds = %219
  store i8 0, ptr %21, align 1, !tbaa !10
  br label %210, !llvm.loop !19

221:                                              ; preds = %214
  br label %222

222:                                              ; preds = %221
  store i8 0, ptr %21, align 1, !tbaa !10
  br label %202, !llvm.loop !20

223:                                              ; preds = %205
  br label %743

224:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #6
  store i8 1, ptr %23, align 1, !tbaa !10
  br label %225

225:                                              ; preds = %248, %224
  %226 = load i8, ptr %23, align 1, !tbaa !10, !range !12, !noundef !13
  %227 = trunc i8 %226 to i1
  br i1 %227, label %229, label %228

228:                                              ; preds = %225
  store i32 29, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  br label %249

229:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %230 = load ptr, ptr %12, align 8, !tbaa !5
  %231 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %230)
          to label %232 unwind label %238

232:                                              ; preds = %229
  store ptr %231, ptr %24, align 8, !tbaa !5
  br label %233

233:                                              ; preds = %246, %232
  %234 = load ptr, ptr %24, align 8, !tbaa !5
  %235 = load i8, ptr %23, align 1, !tbaa !10, !range !12, !noundef !13
  %236 = trunc i8 %235 to i1
  br i1 %236, label %242, label %237

237:                                              ; preds = %233
  store i32 32, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  br label %247

238:                                              ; preds = %242, %229
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %13, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  br label %745

242:                                              ; preds = %233
  %243 = load ptr, ptr %24, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %243, i32 0, i32 0
  invoke void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1H17expand_ivars_pathERS_RNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(88) %244)
          to label %245 unwind label %238

245:                                              ; preds = %242
  br label %246

246:                                              ; preds = %245
  store i8 0, ptr %23, align 1, !tbaa !10
  br label %233, !llvm.loop !21

247:                                              ; preds = %237
  br label %248

248:                                              ; preds = %247
  store i8 0, ptr %23, align 1, !tbaa !10
  br label %225, !llvm.loop !22

249:                                              ; preds = %228
  br label %743

250:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #6
  store i8 1, ptr %25, align 1, !tbaa !10
  br label %251

251:                                              ; preds = %271, %250
  %252 = load i8, ptr %25, align 1, !tbaa !10, !range !12, !noundef !13
  %253 = trunc i8 %252 to i1
  br i1 %253, label %255, label %254

254:                                              ; preds = %251
  store i32 35, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  br label %272

255:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %256 = load ptr, ptr %12, align 8, !tbaa !5
  %257 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %256)
          to label %258 unwind label %264

258:                                              ; preds = %255
  store ptr %257, ptr %26, align 8, !tbaa !5
  br label %259

259:                                              ; preds = %269, %258
  %260 = load ptr, ptr %26, align 8, !tbaa !5
  %261 = load i8, ptr %25, align 1, !tbaa !10, !range !12, !noundef !13
  %262 = trunc i8 %261 to i1
  br i1 %262, label %268, label %263

263:                                              ; preds = %259
  store i32 38, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %270

264:                                              ; preds = %255
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %13, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  br label %745

268:                                              ; preds = %259
  br label %269

269:                                              ; preds = %268
  store i8 0, ptr %25, align 1, !tbaa !10
  br label %259, !llvm.loop !23

270:                                              ; preds = %263
  br label %271

271:                                              ; preds = %270
  store i8 0, ptr %25, align 1, !tbaa !10
  br label %251, !llvm.loop !24

272:                                              ; preds = %254
  br label %743

273:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #6
  store i8 1, ptr %27, align 1, !tbaa !10
  br label %274

274:                                              ; preds = %323, %273
  %275 = load i8, ptr %27, align 1, !tbaa !10, !range !12, !noundef !13
  %276 = trunc i8 %275 to i1
  br i1 %276, label %278, label %277

277:                                              ; preds = %274
  store i32 41, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #6
  br label %324

278:                                              ; preds = %274
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %279 = load ptr, ptr %12, align 8, !tbaa !5
  %280 = invoke noundef nonnull align 8 dereferenceable(172) ptr @_ZN3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %279)
          to label %281 unwind label %287

281:                                              ; preds = %278
  store ptr %280, ptr %28, align 8, !tbaa !5
  br label %282

282:                                              ; preds = %320, %281
  %283 = load ptr, ptr %28, align 8, !tbaa !5
  %284 = load i8, ptr %27, align 1, !tbaa !10, !range !12, !noundef !13
  %285 = trunc i8 %284 to i1
  br i1 %285, label %291, label %286

286:                                              ; preds = %282
  store i32 44, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %322

287:                                              ; preds = %291, %278
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %13, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %14, align 4
  br label %321

291:                                              ; preds = %282
  %292 = load ptr, ptr %28, align 8, !tbaa !5
  %293 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %292, i32 0, i32 0
  %294 = getelementptr inbounds %"class.HIR::TraitPath", ptr %293, i32 0, i32 1
  %295 = getelementptr inbounds %"class.HIR::GenericPath", ptr %294, i32 0, i32 1
  invoke void @_ZN16HMTypeInferrence19expand_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(24) %295)
          to label %296 unwind label %287

296:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %297 = load ptr, ptr %28, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %297, i32 0, i32 1
  store ptr %298, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %299 = load ptr, ptr %29, align 8, !tbaa !5
  %300 = call ptr @_ZNSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %299) #6
  %301 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.162", ptr %30, i32 0, i32 0
  store ptr %300, ptr %301, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %302 = load ptr, ptr %29, align 8, !tbaa !5
  %303 = call ptr @_ZNSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %302) #6
  %304 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.162", ptr %31, i32 0, i32 0
  store ptr %303, ptr %304, align 8
  br label %305

305:                                              ; preds = %313, %296
  %306 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %31) #6
  br i1 %306, label %308, label %307

307:                                              ; preds = %305
  store i32 47, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %319

308:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %309 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %30) #6
  store ptr %309, ptr %32, align 8, !tbaa !5
  %310 = load ptr, ptr %32, align 8, !tbaa !5
  %311 = getelementptr inbounds %"class.HIR::GenericPath", ptr %310, i32 0, i32 1
  invoke void @_ZN16HMTypeInferrence19expand_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(24) %311)
          to label %312 unwind label %315

312:                                              ; preds = %308
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  br label %313

313:                                              ; preds = %312
  %314 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %30) #6
  br label %305

315:                                              ; preds = %308
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %13, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %321

319:                                              ; preds = %307
  br label %320

320:                                              ; preds = %319
  store i8 0, ptr %27, align 1, !tbaa !10
  br label %282, !llvm.loop !25

321:                                              ; preds = %315, %287
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #6
  br label %745

322:                                              ; preds = %286
  br label %323

323:                                              ; preds = %322
  store i8 0, ptr %27, align 1, !tbaa !10
  br label %274, !llvm.loop !26

324:                                              ; preds = %277
  br label %743

325:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #6
  store i8 1, ptr %33, align 1, !tbaa !10
  br label %326

326:                                              ; preds = %471, %325
  %327 = load i8, ptr %33, align 1, !tbaa !10, !range !12, !noundef !13
  %328 = trunc i8 %327 to i1
  br i1 %328, label %330, label %329

329:                                              ; preds = %326
  store i32 49, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #6
  br label %472

330:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %331 = load ptr, ptr %12, align 8, !tbaa !5
  %332 = invoke noundef nonnull align 8 dereferenceable(160) ptr @_ZN3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %331)
          to label %333 unwind label %339

333:                                              ; preds = %330
  store ptr %332, ptr %34, align 8, !tbaa !5
  br label %334

334:                                              ; preds = %468, %333
  %335 = load ptr, ptr %34, align 8, !tbaa !5
  %336 = load i8, ptr %33, align 1, !tbaa !10, !range !12, !noundef !13
  %337 = trunc i8 %336 to i1
  br i1 %337, label %343, label %338

338:                                              ; preds = %334
  store i32 52, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %470

339:                                              ; preds = %330
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %13, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %14, align 4
  br label %469

343:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #6
  store i8 1, ptr %35, align 1, !tbaa !10
  br label %344

344:                                              ; preds = %442, %343
  %345 = load i8, ptr %35, align 1, !tbaa !10, !range !12, !noundef !13
  %346 = trunc i8 %345 to i1
  br i1 %346, label %348, label %347

347:                                              ; preds = %344
  store i32 55, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #6
  br label %443

348:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %349 = load ptr, ptr %34, align 8, !tbaa !5
  %350 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %349, i32 0, i32 3
  store ptr %350, ptr %36, align 8, !tbaa !5
  br label %351

351:                                              ; preds = %439, %348
  %352 = load i8, ptr %35, align 1, !tbaa !10, !range !12, !noundef !13
  %353 = trunc i8 %352 to i1
  br i1 %353, label %355, label %354

354:                                              ; preds = %351
  store i32 58, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %441

355:                                              ; preds = %351
  %356 = load ptr, ptr %36, align 8, !tbaa !5
  %357 = invoke noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %356)
          to label %358 unwind label %359

358:                                              ; preds = %355
  switch i32 %357, label %438 [
    i32 0, label %363
    i32 1, label %364
    i32 2, label %390
    i32 3, label %415
  ]

359:                                              ; preds = %355
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %13, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %14, align 4
  br label %440

363:                                              ; preds = %358
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 511, ptr noundef @__PRETTY_FUNCTION__._ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE) #8
  unreachable

364:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #6
  store i8 1, ptr %37, align 1, !tbaa !10
  br label %365

365:                                              ; preds = %388, %364
  %366 = load i8, ptr %37, align 1, !tbaa !10, !range !12, !noundef !13
  %367 = trunc i8 %366 to i1
  br i1 %367, label %369, label %368

368:                                              ; preds = %365
  store i32 62, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #6
  br label %389

369:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %370 = load ptr, ptr %36, align 8, !tbaa !5
  %371 = invoke noundef nonnull align 8 dereferenceable(92) ptr @_ZN3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %370)
          to label %372 unwind label %378

372:                                              ; preds = %369
  store ptr %371, ptr %38, align 8, !tbaa !5
  br label %373

373:                                              ; preds = %386, %372
  %374 = load ptr, ptr %38, align 8, !tbaa !5
  %375 = load i8, ptr %37, align 1, !tbaa !10, !range !12, !noundef !13
  %376 = trunc i8 %375 to i1
  br i1 %376, label %382, label %377

377:                                              ; preds = %373
  store i32 65, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %387

378:                                              ; preds = %382, %369
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %13, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #6
  br label %440

382:                                              ; preds = %373
  %383 = load ptr, ptr %38, align 8, !tbaa !5
  %384 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %383, i32 0, i32 0
  invoke void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1H17expand_ivars_pathERS_RNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(88) %384)
          to label %385 unwind label %378

385:                                              ; preds = %382
  br label %386

386:                                              ; preds = %385
  store i8 0, ptr %37, align 1, !tbaa !10
  br label %373, !llvm.loop !27

387:                                              ; preds = %377
  br label %388

388:                                              ; preds = %387
  store i8 0, ptr %37, align 1, !tbaa !10
  br label %365, !llvm.loop !28

389:                                              ; preds = %368
  br label %438

390:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #6
  store i8 1, ptr %39, align 1, !tbaa !10
  br label %391

391:                                              ; preds = %413, %390
  %392 = load i8, ptr %39, align 1, !tbaa !10, !range !12, !noundef !13
  %393 = trunc i8 %392 to i1
  br i1 %393, label %395, label %394

394:                                              ; preds = %391
  store i32 68, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #6
  br label %414

395:                                              ; preds = %391
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %396 = load ptr, ptr %36, align 8, !tbaa !5
  %397 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %396)
          to label %398 unwind label %404

398:                                              ; preds = %395
  store ptr %397, ptr %40, align 8, !tbaa !5
  br label %399

399:                                              ; preds = %411, %398
  %400 = load ptr, ptr %40, align 8, !tbaa !5
  %401 = load i8, ptr %39, align 1, !tbaa !10, !range !12, !noundef !13
  %402 = trunc i8 %401 to i1
  br i1 %402, label %408, label %403

403:                                              ; preds = %399
  store i32 71, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  br label %412

404:                                              ; preds = %408, %395
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %13, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #6
  br label %440

408:                                              ; preds = %399
  %409 = load ptr, ptr %40, align 8, !tbaa !5
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %409)
          to label %410 unwind label %404

410:                                              ; preds = %408
  br label %411

411:                                              ; preds = %410
  store i8 0, ptr %39, align 1, !tbaa !10
  br label %399, !llvm.loop !29

412:                                              ; preds = %403
  br label %413

413:                                              ; preds = %412
  store i8 0, ptr %39, align 1, !tbaa !10
  br label %391, !llvm.loop !30

414:                                              ; preds = %394
  br label %438

415:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #6
  store i8 1, ptr %41, align 1, !tbaa !10
  br label %416

416:                                              ; preds = %436, %415
  %417 = load i8, ptr %41, align 1, !tbaa !10, !range !12, !noundef !13
  %418 = trunc i8 %417 to i1
  br i1 %418, label %420, label %419

419:                                              ; preds = %416
  store i32 74, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #6
  br label %437

420:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %421 = load ptr, ptr %36, align 8, !tbaa !5
  %422 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %421)
          to label %423 unwind label %429

423:                                              ; preds = %420
  store ptr %422, ptr %42, align 8, !tbaa !5
  br label %424

424:                                              ; preds = %434, %423
  %425 = load ptr, ptr %42, align 8, !tbaa !5
  %426 = load i8, ptr %41, align 1, !tbaa !10, !range !12, !noundef !13
  %427 = trunc i8 %426 to i1
  br i1 %427, label %433, label %428

428:                                              ; preds = %424
  store i32 77, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %435

429:                                              ; preds = %420
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %13, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #6
  br label %440

433:                                              ; preds = %424
  br label %434

434:                                              ; preds = %433
  store i8 0, ptr %41, align 1, !tbaa !10
  br label %424, !llvm.loop !31

435:                                              ; preds = %428
  br label %436

436:                                              ; preds = %435
  store i8 0, ptr %41, align 1, !tbaa !10
  br label %416, !llvm.loop !32

437:                                              ; preds = %419
  br label %438

438:                                              ; preds = %437, %414, %389, %358
  br label %439

439:                                              ; preds = %438
  store i8 0, ptr %35, align 1, !tbaa !10
  br label %351, !llvm.loop !33

440:                                              ; preds = %429, %404, %378, %359
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #6
  br label %469

441:                                              ; preds = %354
  br label %442

442:                                              ; preds = %441
  store i8 0, ptr %35, align 1, !tbaa !10
  br label %344, !llvm.loop !34

443:                                              ; preds = %347
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  %444 = load ptr, ptr %34, align 8, !tbaa !5
  %445 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %444, i32 0, i32 1
  store ptr %445, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %446 = load ptr, ptr %43, align 8, !tbaa !5
  %447 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %446) #6
  %448 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.163", ptr %44, i32 0, i32 0
  store ptr %447, ptr %448, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %449 = load ptr, ptr %43, align 8, !tbaa !5
  %450 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %449) #6
  %451 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.163", ptr %45, i32 0, i32 0
  store ptr %450, ptr %451, align 8
  br label %452

452:                                              ; preds = %461, %443
  %453 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %45) #6
  br i1 %453, label %455, label %454

454:                                              ; preds = %452
  store i32 80, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  br label %467

455:                                              ; preds = %452
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %456 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %44) #6
  store ptr %456, ptr %46, align 8, !tbaa !5
  %457 = load ptr, ptr %46, align 8, !tbaa !5
  %458 = getelementptr inbounds %"class.HIR::TraitPath", ptr %457, i32 0, i32 1
  %459 = getelementptr inbounds %"class.HIR::GenericPath", ptr %458, i32 0, i32 1
  invoke void @_ZN16HMTypeInferrence19expand_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(24) %459)
          to label %460 unwind label %463

460:                                              ; preds = %455
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %461

461:                                              ; preds = %460
  %462 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %44) #6
  br label %452

463:                                              ; preds = %455
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %13, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  br label %469

467:                                              ; preds = %454
  br label %468

468:                                              ; preds = %467
  store i8 0, ptr %33, align 1, !tbaa !10
  br label %334, !llvm.loop !35

469:                                              ; preds = %463, %440, %339
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #6
  br label %745

470:                                              ; preds = %338
  br label %471

471:                                              ; preds = %470
  store i8 0, ptr %33, align 1, !tbaa !10
  br label %326, !llvm.loop !36

472:                                              ; preds = %329
  br label %743

473:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #6
  store i8 1, ptr %47, align 1, !tbaa !10
  br label %474

474:                                              ; preds = %497, %473
  %475 = load i8, ptr %47, align 1, !tbaa !10, !range !12, !noundef !13
  %476 = trunc i8 %475 to i1
  br i1 %476, label %478, label %477

477:                                              ; preds = %474
  store i32 82, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #6
  br label %498

478:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  %479 = load ptr, ptr %12, align 8, !tbaa !5
  %480 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %479)
          to label %481 unwind label %487

481:                                              ; preds = %478
  store ptr %480, ptr %48, align 8, !tbaa !5
  br label %482

482:                                              ; preds = %495, %481
  %483 = load ptr, ptr %48, align 8, !tbaa !5
  %484 = load i8, ptr %47, align 1, !tbaa !10, !range !12, !noundef !13
  %485 = trunc i8 %484 to i1
  br i1 %485, label %491, label %486

486:                                              ; preds = %482
  store i32 85, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  br label %496

487:                                              ; preds = %491, %478
  %488 = landingpad { ptr, i32 }
          cleanup
  %489 = extractvalue { ptr, i32 } %488, 0
  store ptr %489, ptr %13, align 8
  %490 = extractvalue { ptr, i32 } %488, 1
  store i32 %490, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #6
  br label %745

491:                                              ; preds = %482
  %492 = load ptr, ptr %48, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %492, i32 0, i32 0
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %493)
          to label %494 unwind label %487

494:                                              ; preds = %491
  br label %495

495:                                              ; preds = %494
  store i8 0, ptr %47, align 1, !tbaa !10
  br label %482, !llvm.loop !37

496:                                              ; preds = %486
  br label %497

497:                                              ; preds = %496
  store i8 0, ptr %47, align 1, !tbaa !10
  br label %474, !llvm.loop !38

498:                                              ; preds = %477
  br label %743

499:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #6
  store i8 1, ptr %49, align 1, !tbaa !10
  br label %500

500:                                              ; preds = %523, %499
  %501 = load i8, ptr %49, align 1, !tbaa !10, !range !12, !noundef !13
  %502 = trunc i8 %501 to i1
  br i1 %502, label %504, label %503

503:                                              ; preds = %500
  store i32 88, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #6
  br label %524

504:                                              ; preds = %500
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %505 = load ptr, ptr %12, align 8, !tbaa !5
  %506 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %505)
          to label %507 unwind label %513

507:                                              ; preds = %504
  store ptr %506, ptr %50, align 8, !tbaa !5
  br label %508

508:                                              ; preds = %521, %507
  %509 = load ptr, ptr %50, align 8, !tbaa !5
  %510 = load i8, ptr %49, align 1, !tbaa !10, !range !12, !noundef !13
  %511 = trunc i8 %510 to i1
  br i1 %511, label %517, label %512

512:                                              ; preds = %508
  store i32 91, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  br label %522

513:                                              ; preds = %517, %504
  %514 = landingpad { ptr, i32 }
          cleanup
  %515 = extractvalue { ptr, i32 } %514, 0
  store ptr %515, ptr %13, align 8
  %516 = extractvalue { ptr, i32 } %514, 1
  store i32 %516, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #6
  br label %745

517:                                              ; preds = %508
  %518 = load ptr, ptr %50, align 8, !tbaa !5
  %519 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %518, i32 0, i32 0
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %519)
          to label %520 unwind label %513

520:                                              ; preds = %517
  br label %521

521:                                              ; preds = %520
  store i8 0, ptr %49, align 1, !tbaa !10
  br label %508, !llvm.loop !39

522:                                              ; preds = %512
  br label %523

523:                                              ; preds = %522
  store i8 0, ptr %49, align 1, !tbaa !10
  br label %500, !llvm.loop !40

524:                                              ; preds = %503
  br label %743

525:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %51) #6
  store i8 1, ptr %51, align 1, !tbaa !10
  br label %526

526:                                              ; preds = %568, %525
  %527 = load i8, ptr %51, align 1, !tbaa !10, !range !12, !noundef !13
  %528 = trunc i8 %527 to i1
  br i1 %528, label %530, label %529

529:                                              ; preds = %526
  store i32 94, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #6
  br label %569

530:                                              ; preds = %526
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #6
  %531 = load ptr, ptr %12, align 8, !tbaa !5
  %532 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %531)
          to label %533 unwind label %539

533:                                              ; preds = %530
  store ptr %532, ptr %52, align 8, !tbaa !5
  br label %534

534:                                              ; preds = %565, %533
  %535 = load ptr, ptr %52, align 8, !tbaa !5
  %536 = load i8, ptr %51, align 1, !tbaa !10, !range !12, !noundef !13
  %537 = trunc i8 %536 to i1
  br i1 %537, label %543, label %538

538:                                              ; preds = %534
  store i32 97, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  br label %567

539:                                              ; preds = %530
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %13, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %14, align 4
  br label %566

543:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  %544 = load ptr, ptr %52, align 8, !tbaa !5
  store ptr %544, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  %545 = load ptr, ptr %53, align 8, !tbaa !5
  %546 = call ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %545) #6
  %547 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.164", ptr %54, i32 0, i32 0
  store ptr %546, ptr %547, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #6
  %548 = load ptr, ptr %53, align 8, !tbaa !5
  %549 = call ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %548) #6
  %550 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.164", ptr %55, i32 0, i32 0
  store ptr %549, ptr %550, align 8
  br label %551

551:                                              ; preds = %558, %543
  %552 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %55) #6
  br i1 %552, label %554, label %553

553:                                              ; preds = %551
  store i32 100, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  br label %564

554:                                              ; preds = %551
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  %555 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #6
  store ptr %555, ptr %56, align 8, !tbaa !5
  %556 = load ptr, ptr %56, align 8, !tbaa !5
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %556)
          to label %557 unwind label %560

557:                                              ; preds = %554
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  br label %558

558:                                              ; preds = %557
  %559 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #6
  br label %551

560:                                              ; preds = %554
  %561 = landingpad { ptr, i32 }
          cleanup
  %562 = extractvalue { ptr, i32 } %561, 0
  store ptr %562, ptr %13, align 8
  %563 = extractvalue { ptr, i32 } %561, 1
  store i32 %563, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  br label %566

564:                                              ; preds = %553
  br label %565

565:                                              ; preds = %564
  store i8 0, ptr %51, align 1, !tbaa !10
  br label %534, !llvm.loop !41

566:                                              ; preds = %560, %539
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #6
  br label %745

567:                                              ; preds = %538
  br label %568

568:                                              ; preds = %567
  store i8 0, ptr %51, align 1, !tbaa !10
  br label %526, !llvm.loop !42

569:                                              ; preds = %529
  br label %743

570:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #6
  store i8 1, ptr %57, align 1, !tbaa !10
  br label %571

571:                                              ; preds = %594, %570
  %572 = load i8, ptr %57, align 1, !tbaa !10, !range !12, !noundef !13
  %573 = trunc i8 %572 to i1
  br i1 %573, label %575, label %574

574:                                              ; preds = %571
  store i32 102, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #6
  br label %595

575:                                              ; preds = %571
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #6
  %576 = load ptr, ptr %12, align 8, !tbaa !5
  %577 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %576)
          to label %578 unwind label %584

578:                                              ; preds = %575
  store ptr %577, ptr %58, align 8, !tbaa !5
  br label %579

579:                                              ; preds = %592, %578
  %580 = load ptr, ptr %58, align 8, !tbaa !5
  %581 = load i8, ptr %57, align 1, !tbaa !10, !range !12, !noundef !13
  %582 = trunc i8 %581 to i1
  br i1 %582, label %588, label %583

583:                                              ; preds = %579
  store i32 105, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  br label %593

584:                                              ; preds = %588, %575
  %585 = landingpad { ptr, i32 }
          cleanup
  %586 = extractvalue { ptr, i32 } %585, 0
  store ptr %586, ptr %13, align 8
  %587 = extractvalue { ptr, i32 } %585, 1
  store i32 %587, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #6
  br label %745

588:                                              ; preds = %579
  %589 = load ptr, ptr %58, align 8, !tbaa !5
  %590 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %589, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %590)
          to label %591 unwind label %584

591:                                              ; preds = %588
  br label %592

592:                                              ; preds = %591
  store i8 0, ptr %57, align 1, !tbaa !10
  br label %579, !llvm.loop !43

593:                                              ; preds = %583
  br label %594

594:                                              ; preds = %593
  store i8 0, ptr %57, align 1, !tbaa !10
  br label %571, !llvm.loop !44

595:                                              ; preds = %574
  br label %743

596:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #6
  store i8 1, ptr %59, align 1, !tbaa !10
  br label %597

597:                                              ; preds = %620, %596
  %598 = load i8, ptr %59, align 1, !tbaa !10, !range !12, !noundef !13
  %599 = trunc i8 %598 to i1
  br i1 %599, label %601, label %600

600:                                              ; preds = %597
  store i32 108, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #6
  br label %621

601:                                              ; preds = %597
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #6
  %602 = load ptr, ptr %12, align 8, !tbaa !5
  %603 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %602)
          to label %604 unwind label %610

604:                                              ; preds = %601
  store ptr %603, ptr %60, align 8, !tbaa !5
  br label %605

605:                                              ; preds = %618, %604
  %606 = load ptr, ptr %60, align 8, !tbaa !5
  %607 = load i8, ptr %59, align 1, !tbaa !10, !range !12, !noundef !13
  %608 = trunc i8 %607 to i1
  br i1 %608, label %614, label %609

609:                                              ; preds = %605
  store i32 111, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  br label %619

610:                                              ; preds = %614, %601
  %611 = landingpad { ptr, i32 }
          cleanup
  %612 = extractvalue { ptr, i32 } %611, 0
  store ptr %612, ptr %13, align 8
  %613 = extractvalue { ptr, i32 } %611, 1
  store i32 %613, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #6
  br label %745

614:                                              ; preds = %605
  %615 = load ptr, ptr %60, align 8, !tbaa !5
  %616 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %615, i32 0, i32 1
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %616)
          to label %617 unwind label %610

617:                                              ; preds = %614
  br label %618

618:                                              ; preds = %617
  store i8 0, ptr %59, align 1, !tbaa !10
  br label %605, !llvm.loop !45

619:                                              ; preds = %609
  br label %620

620:                                              ; preds = %619
  store i8 0, ptr %59, align 1, !tbaa !10
  br label %597, !llvm.loop !46

621:                                              ; preds = %600
  br label %743

622:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #6
  store i8 1, ptr %61, align 1, !tbaa !10
  br label %623

623:                                              ; preds = %646, %622
  %624 = load i8, ptr %61, align 1, !tbaa !10, !range !12, !noundef !13
  %625 = trunc i8 %624 to i1
  br i1 %625, label %627, label %626

626:                                              ; preds = %623
  store i32 114, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #6
  br label %647

627:                                              ; preds = %623
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #6
  %628 = load ptr, ptr %12, align 8, !tbaa !5
  %629 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %628)
          to label %630 unwind label %636

630:                                              ; preds = %627
  store ptr %629, ptr %62, align 8, !tbaa !5
  br label %631

631:                                              ; preds = %644, %630
  %632 = load ptr, ptr %62, align 8, !tbaa !5
  %633 = load i8, ptr %61, align 1, !tbaa !10, !range !12, !noundef !13
  %634 = trunc i8 %633 to i1
  br i1 %634, label %640, label %635

635:                                              ; preds = %631
  store i32 117, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  br label %645

636:                                              ; preds = %640, %627
  %637 = landingpad { ptr, i32 }
          cleanup
  %638 = extractvalue { ptr, i32 } %637, 0
  store ptr %638, ptr %13, align 8
  %639 = extractvalue { ptr, i32 } %637, 1
  store i32 %639, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #6
  br label %745

640:                                              ; preds = %631
  %641 = load ptr, ptr %62, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %641, i32 0, i32 0
  invoke void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1H17expand_ivars_pathERS_RNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(88) %642)
          to label %643 unwind label %636

643:                                              ; preds = %640
  br label %644

644:                                              ; preds = %643
  store i8 0, ptr %61, align 1, !tbaa !10
  br label %631, !llvm.loop !47

645:                                              ; preds = %635
  br label %646

646:                                              ; preds = %645
  store i8 0, ptr %61, align 1, !tbaa !10
  br label %623, !llvm.loop !48

647:                                              ; preds = %626
  br label %743

648:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %63) #6
  store i8 1, ptr %63, align 1, !tbaa !10
  br label %649

649:                                              ; preds = %695, %648
  %650 = load i8, ptr %63, align 1, !tbaa !10, !range !12, !noundef !13
  %651 = trunc i8 %650 to i1
  br i1 %651, label %653, label %652

652:                                              ; preds = %649
  store i32 120, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #6
  br label %696

653:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #6
  %654 = load ptr, ptr %12, align 8, !tbaa !5
  %655 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %654)
          to label %656 unwind label %662

656:                                              ; preds = %653
  store ptr %655, ptr %64, align 8, !tbaa !5
  br label %657

657:                                              ; preds = %692, %656
  %658 = load ptr, ptr %64, align 8, !tbaa !5
  %659 = load i8, ptr %63, align 1, !tbaa !10, !range !12, !noundef !13
  %660 = trunc i8 %659 to i1
  br i1 %660, label %666, label %661

661:                                              ; preds = %657
  store i32 123, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #6
  br label %694

662:                                              ; preds = %666, %653
  %663 = landingpad { ptr, i32 }
          cleanup
  %664 = extractvalue { ptr, i32 } %663, 0
  store ptr %664, ptr %13, align 8
  %665 = extractvalue { ptr, i32 } %663, 1
  store i32 %665, ptr %14, align 4
  br label %693

666:                                              ; preds = %657
  %667 = load ptr, ptr %64, align 8, !tbaa !5
  %668 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %667, i32 0, i32 4
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %668)
          to label %669 unwind label %662

669:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #6
  %670 = load ptr, ptr %64, align 8, !tbaa !5
  %671 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %670, i32 0, i32 5
  store ptr %671, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #6
  %672 = load ptr, ptr %65, align 8, !tbaa !5
  %673 = call ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %672) #6
  %674 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.164", ptr %66, i32 0, i32 0
  store ptr %673, ptr %674, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #6
  %675 = load ptr, ptr %65, align 8, !tbaa !5
  %676 = call ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %675) #6
  %677 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.164", ptr %67, i32 0, i32 0
  store ptr %676, ptr %677, align 8
  br label %678

678:                                              ; preds = %685, %669
  %679 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %66, ptr noundef nonnull align 8 dereferenceable(8) %67) #6
  br i1 %679, label %681, label %680

680:                                              ; preds = %678
  store i32 126, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #6
  br label %691

681:                                              ; preds = %678
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #6
  %682 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %66) #6
  store ptr %682, ptr %68, align 8, !tbaa !5
  %683 = load ptr, ptr %68, align 8, !tbaa !5
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %73, ptr noundef nonnull align 8 dereferenceable(8) %683)
          to label %684 unwind label %687

684:                                              ; preds = %681
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #6
  br label %685

685:                                              ; preds = %684
  %686 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %66) #6
  br label %678

687:                                              ; preds = %681
  %688 = landingpad { ptr, i32 }
          cleanup
  %689 = extractvalue { ptr, i32 } %688, 0
  store ptr %689, ptr %13, align 8
  %690 = extractvalue { ptr, i32 } %688, 1
  store i32 %690, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #6
  br label %693

691:                                              ; preds = %680
  br label %692

692:                                              ; preds = %691
  store i8 0, ptr %63, align 1, !tbaa !10
  br label %657, !llvm.loop !49

693:                                              ; preds = %687, %662
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #6
  br label %745

694:                                              ; preds = %661
  br label %695

695:                                              ; preds = %694
  store i8 0, ptr %63, align 1, !tbaa !10
  br label %649, !llvm.loop !50

696:                                              ; preds = %652
  br label %743

697:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %69) #6
  store i8 1, ptr %69, align 1, !tbaa !10
  br label %698

698:                                              ; preds = %718, %697
  %699 = load i8, ptr %69, align 1, !tbaa !10, !range !12, !noundef !13
  %700 = trunc i8 %699 to i1
  br i1 %700, label %702, label %701

701:                                              ; preds = %698
  store i32 128, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #6
  br label %719

702:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #6
  %703 = load ptr, ptr %12, align 8, !tbaa !5
  %704 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %703)
          to label %705 unwind label %711

705:                                              ; preds = %702
  store ptr %704, ptr %70, align 8, !tbaa !5
  br label %706

706:                                              ; preds = %716, %705
  %707 = load ptr, ptr %70, align 8, !tbaa !5
  %708 = load i8, ptr %69, align 1, !tbaa !10, !range !12, !noundef !13
  %709 = trunc i8 %708 to i1
  br i1 %709, label %715, label %710

710:                                              ; preds = %706
  store i32 131, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #6
  br label %717

711:                                              ; preds = %702
  %712 = landingpad { ptr, i32 }
          cleanup
  %713 = extractvalue { ptr, i32 } %712, 0
  store ptr %713, ptr %13, align 8
  %714 = extractvalue { ptr, i32 } %712, 1
  store i32 %714, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #6
  br label %745

715:                                              ; preds = %706
  br label %716

716:                                              ; preds = %715
  store i8 0, ptr %69, align 1, !tbaa !10
  br label %706, !llvm.loop !51

717:                                              ; preds = %710
  br label %718

718:                                              ; preds = %717
  store i8 0, ptr %69, align 1, !tbaa !10
  br label %698, !llvm.loop !52

719:                                              ; preds = %701
  br label %743

720:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %71) #6
  store i8 1, ptr %71, align 1, !tbaa !10
  br label %721

721:                                              ; preds = %741, %720
  %722 = load i8, ptr %71, align 1, !tbaa !10, !range !12, !noundef !13
  %723 = trunc i8 %722 to i1
  br i1 %723, label %725, label %724

724:                                              ; preds = %721
  store i32 134, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #6
  br label %742

725:                                              ; preds = %721
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #6
  %726 = load ptr, ptr %12, align 8, !tbaa !5
  %727 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %726)
          to label %728 unwind label %734

728:                                              ; preds = %725
  store ptr %727, ptr %72, align 8, !tbaa !5
  br label %729

729:                                              ; preds = %739, %728
  %730 = load ptr, ptr %72, align 8, !tbaa !5
  %731 = load i8, ptr %71, align 1, !tbaa !10, !range !12, !noundef !13
  %732 = trunc i8 %731 to i1
  br i1 %732, label %738, label %733

733:                                              ; preds = %729
  store i32 137, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #6
  br label %740

734:                                              ; preds = %725
  %735 = landingpad { ptr, i32 }
          cleanup
  %736 = extractvalue { ptr, i32 } %735, 0
  store ptr %736, ptr %13, align 8
  %737 = extractvalue { ptr, i32 } %735, 1
  store i32 %737, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #6
  br label %745

738:                                              ; preds = %729
  br label %739

739:                                              ; preds = %738
  store i8 0, ptr %71, align 1, !tbaa !10
  br label %729, !llvm.loop !53

740:                                              ; preds = %733
  br label %741

741:                                              ; preds = %740
  store i8 0, ptr %71, align 1, !tbaa !10
  br label %721, !llvm.loop !54

742:                                              ; preds = %724
  br label %743

743:                                              ; preds = %742, %719, %696, %647, %621, %595, %569, %524, %498, %472, %324, %272, %249, %223, %200, %177, %125
  br label %744

744:                                              ; preds = %743
  store i8 0, ptr %11, align 1, !tbaa !10
  br label %114, !llvm.loop !55

745:                                              ; preds = %734, %711, %693, %636, %610, %584, %566, %513, %487, %469, %321, %264, %238, %215, %192, %174, %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #6
  call void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_D2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #6
  br label %750

746:                                              ; preds = %117
  br label %747

747:                                              ; preds = %746
  store i8 0, ptr %11, align 1, !tbaa !10
  br label %106, !llvm.loop !56

748:                                              ; preds = %109
  call void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_D2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #6
  br label %749

749:                                              ; preds = %748, %102
  ret void

750:                                              ; preds = %745
  %751 = load ptr, ptr %13, align 8
  %752 = load i32, ptr %14, align 4
  %753 = insertvalue { ptr, i32 } poison, ptr %751, 0
  %754 = insertvalue { ptr, i32 } %753, i32 %752, 1
  resume { ptr, i32 } %754

755:                                              ; preds = %102
  unreachable
}

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

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

; Function Attrs: nounwind
declare i32 @__cxa_thread_atexit(ptr, ptr, ptr) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #7

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_C2EPKS1_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef) unnamed_addr #5 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1H17expand_ivars_pathERS_RNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(88)) #5 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_D2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nounwind }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"branch_weights", i32 1, i32 1023}
!10 = !{!11, !11, i64 0}
!11 = !{!"bool", !7, i64 0}
!12 = !{i8 0, i8 2}
!13 = !{}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !15}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = distinct !{!28, !15}
!29 = distinct !{!29, !15}
!30 = distinct !{!30, !15}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !15}
!33 = distinct !{!33, !15}
!34 = distinct !{!34, !15}
!35 = distinct !{!35, !15}
!36 = distinct !{!36, !15}
!37 = distinct !{!37, !15}
!38 = distinct !{!38, !15}
!39 = distinct !{!39, !15}
!40 = distinct !{!40, !15}
!41 = distinct !{!41, !15}
!42 = distinct !{!42, !15}
!43 = distinct !{!43, !15}
!44 = distinct !{!44, !15}
!45 = distinct !{!45, !15}
!46 = distinct !{!46, !15}
!47 = distinct !{!47, !15}
!48 = distinct !{!48, !15}
!49 = distinct !{!49, !15}
!50 = distinct !{!50, !15}
!51 = distinct !{!51, !15}
!52 = distinct !{!52, !15}
!53 = distinct !{!53, !15}
!54 = distinct !{!54, !15}
!55 = distinct !{!55, !15}
!56 = distinct !{!56, !15}


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

%"class.std::vector.156" = type { %"struct.std::_Vector_base.157" }
%"struct.std::_Vector_base.157" = type { %"struct.std::_Vector_base<const HIR::TypeRef *, std::allocator<const HIR::TypeRef *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::TypeRef *, std::allocator<const HIR::TypeRef *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::TypeRef *, std::allocator<const HIR::TypeRef *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::TypeRef *, std::allocator<const HIR::TypeRef *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeRef" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.161" = type { ptr }
%struct._ = type { i8 }
%"class.__gnu_cxx::__normal_iterator.162" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.163" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.164" = type { ptr }

@__dso_handle = external hidden global i8
@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack = external hidden thread_local global %"class.std::vector.156", align 8
@_ZGVZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack = external hidden thread_local local_unnamed_addr global i8, align 1
@__PRETTY_FUNCTION__._ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE = external hidden unnamed_addr constant [54 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

; Function Attrs: mustprogress 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 #5 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.__gnu_cxx::__normal_iterator.161", align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.161", align 8
  %5 = alloca %struct._, align 1
  %6 = alloca %"class.HIR::TypeRef", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.162", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator.162", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator.163", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator.163", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator.164", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator.164", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.164", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.164", align 8
  %15 = load i8, ptr @_ZGVZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack, align 1
  %16 = icmp eq i8 %15, 0
  br i1 %16, label %17, label %19, !prof !5

17:                                               ; preds = %2
  tail call void @_ZNSt6vectorIPKN3HIR7TypeRefESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack) #6
  %18 = tail call i32 @__cxa_thread_atexit(ptr nonnull @_ZNSt6vectorIPKN3HIR7TypeRefESaIS3_EED2Ev, ptr nonnull @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack, ptr nonnull @__dso_handle) #6
  store i8 1, ptr @_ZGVZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack, align 1
  br label %19

19:                                               ; preds = %17, %2
  %20 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEE15s_recurse_stack)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #6
  %21 = tail call ptr @_ZNSt6vectorIPKN3HIR7TypeRefESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  store ptr %21, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  %22 = tail call ptr @_ZNSt6vectorIPKN3HIR7TypeRefESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  store ptr %22, ptr %4, align 8
  %23 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPKN3HIR7TypeRefESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #6
  br i1 %23, label %.lr.ph, label %.lr.ph878

.lr.ph:                                           ; preds = %19, %26
  %24 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPKN3HIR7TypeRefESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #6
  %25 = load ptr, ptr %24, align 8, !tbaa !6
  %.not = icmp eq ptr %25, %1
  br i1 %.not, label %29, label %26

26:                                               ; preds = %.lr.ph
  %27 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPKN3HIR7TypeRefESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #6
  %28 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPKN3HIR7TypeRefESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #6
  br i1 %28, label %.lr.ph, label %.lr.ph878

29:                                               ; preds = %.lr.ph
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #6
  br label %116

.loopexit246:                                     ; preds = %.preheader238.split, %.preheader236.split, %.preheader234.split, %.preheader230.split, %.preheader228.split, %.preheader220.split, %.preheader244.split, %.preheader242.split, %.preheader222.split, %.preheader218.split, %.preheader216.split, %.lr.ph878, %..loopexit203_crit_edge, %..loopexit207_crit_edge, %..loopexit211_crit_edge, %58, %56, %..loopexit204_crit_edge
  call void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_D2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  br label %116

.lr.ph878:                                        ; preds = %26, %19
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #6
  call void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_C2EPKS1_(ptr noundef nonnull align 1 dereferenceable(1) %5, ptr noundef nonnull %1)
  %30 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZN3HIR7TypeRef8data_mutEv(ptr noundef nonnull align 8 dereferenceable(8) %1)
  %31 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  switch i32 %31, label %.loopexit246 [
    i32 0, label %55
    i32 1, label %.preheader214.split.split
    i32 2, label %.preheader216.split
    i32 3, label %.preheader218.split
    i32 4, label %.preheader220.split
    i32 5, label %.preheader222.split
    i32 6, label %.preheader224.split.split
    i32 7, label %.preheader197.lr.ph
    i32 8, label %.preheader228.split
    i32 9, label %.preheader230.split
    i32 10, label %.preheader232.split.split
    i32 11, label %.preheader234.split
    i32 12, label %.preheader236.split
    i32 13, label %.preheader238.split
    i32 14, label %.preheader240.split.split
    i32 15, label %.preheader242.split
    i32 16, label %.preheader244.split
  ]

.preheader244.split:                              ; preds = %.lr.ph878
  %32 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  br label %.loopexit246

.preheader242.split:                              ; preds = %.lr.ph878
  %33 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  br label %.loopexit246

.preheader240.split.split:                        ; preds = %.lr.ph878
  %34 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  %35 = getelementptr inbounds i8, ptr %34, i64 112
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %105 unwind label %.split.split

.preheader238.split:                              ; preds = %.lr.ph878
  %36 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  invoke void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1H17expand_ivars_pathERS_RNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(88) %36)
          to label %.loopexit246 unwind label %.split330, !llvm.loop !10

.preheader236.split:                              ; preds = %.lr.ph878
  %37 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  %38 = getelementptr inbounds i8, ptr %37, i64 8
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %.loopexit246 unwind label %.split357, !llvm.loop !12

.preheader234.split:                              ; preds = %.lr.ph878
  %39 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  %40 = getelementptr inbounds i8, ptr %39, i64 8
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %.loopexit246 unwind label %.split385, !llvm.loop !13

.preheader232.split.split:                        ; preds = %.lr.ph878
  %41 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  %42 = call ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %41) #6
  store ptr %42, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %43 = call ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %41) #6
  store ptr %43, ptr %12, align 8
  %44 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #6
  br i1 %44, label %.lr.ph413, label %..loopexit207_crit_edge

.preheader230.split:                              ; preds = %.lr.ph878
  %45 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %.loopexit246 unwind label %.split455, !llvm.loop !14

.preheader228.split:                              ; preds = %.lr.ph878
  %46 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %.loopexit246 unwind label %.split487, !llvm.loop !15

.preheader224.split.split:                        ; preds = %.lr.ph878
  %47 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZN3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  %48 = getelementptr inbounds i8, ptr %47, i64 16
  invoke void @_ZN16HMTypeInferrence19expand_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(24) %48)
          to label %64 unwind label %.split609.split

.preheader222.split:                              ; preds = %.lr.ph878
  %49 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  br label %.loopexit246

.preheader220.split:                              ; preds = %.lr.ph878
  %50 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  invoke void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1H17expand_ivars_pathERS_RNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(88) %50)
          to label %.loopexit246 unwind label %.split701, !llvm.loop !16

.preheader218.split:                              ; preds = %.lr.ph878
  %51 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  br label %.loopexit246

.preheader216.split:                              ; preds = %.lr.ph878
  %52 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  br label %.loopexit246

.preheader214.split.split:                        ; preds = %.lr.ph878
  %53 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  %54 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %56 unwind label %.split825.split

55:                                               ; preds = %.lr.ph878
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 487, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE) #8
  unreachable

56:                                               ; preds = %.preheader214.split.split
  %.not182 = icmp eq ptr %54, %1
  br i1 %.not182, label %.loopexit246, label %57

57:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %6, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %58 unwind label %.split828.split

58:                                               ; preds = %57
  %59 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %6)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %.loopexit246

.split825.split:                                  ; preds = %.preheader214.split.split
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %115

.split828.split:                                  ; preds = %57
  %61 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %115

.split701:                                        ; preds = %.preheader220.split
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %115

.split609.split:                                  ; preds = %.preheader224.split.split
  %63 = landingpad { ptr, i32 }
          cleanup
  br label %115

64:                                               ; preds = %.preheader224.split.split
  %65 = getelementptr inbounds i8, ptr %47, i64 144
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #6
  %66 = call ptr @_ZNSt6vectorIN3HIR11GenericPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %65) #6
  store ptr %66, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %67 = call ptr @_ZNSt6vectorIN3HIR11GenericPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %65) #6
  store ptr %67, ptr %8, align 8
  %68 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #6
  br i1 %68, label %.lr.ph604, label %..loopexit203_crit_edge

..loopexit203_crit_edge:                          ; preds = %71, %64
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  br label %.loopexit246

.lr.ph604:                                        ; preds = %64, %71
  %69 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #6
  %70 = getelementptr inbounds i8, ptr %69, i64 8
  invoke void @_ZN16HMTypeInferrence19expand_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %71 unwind label %.split612.split

71:                                               ; preds = %.lr.ph604
  %72 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #6
  %73 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR11GenericPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #6
  br i1 %73, label %.lr.ph604, label %..loopexit203_crit_edge

.split612.split:                                  ; preds = %.lr.ph604
  %74 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  br label %115

.preheader197.lr.ph:                              ; preds = %.lr.ph878
  %75 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZN3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %30)
  %76 = getelementptr inbounds i8, ptr %75, i64 56
  %77 = getelementptr inbounds i8, ptr %75, i64 8
  %78 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %76)
  switch i32 %78, label %..loopexit196_crit_edge [
    i32 0, label %.split554
    i32 1, label %.preheader.split
    i32 2, label %.preheader192.split
    i32 3, label %.preheader194.split
  ]

.preheader194.split:                              ; preds = %.preheader197.lr.ph
  %79 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %76)
  br label %..loopexit196_crit_edge

.preheader192.split:                              ; preds = %.preheader197.lr.ph
  %80 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %76)
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %80)
          to label %..loopexit196_crit_edge unwind label %.split525.split.split, !llvm.loop !17

.preheader.split:                                 ; preds = %.preheader197.lr.ph
  %81 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZN3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %76)
  invoke void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1H17expand_ivars_pathERS_RNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(88) %81)
          to label %..loopexit196_crit_edge unwind label %.split534.split.split, !llvm.loop !18

.split554:                                        ; preds = %.preheader197.lr.ph
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 511, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE) #8
  unreachable

.split534.split.split:                            ; preds = %.preheader.split
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %115

.split525.split.split:                            ; preds = %.preheader192.split
  %83 = landingpad { ptr, i32 }
          cleanup
  br label %115

..loopexit196_crit_edge:                          ; preds = %.preheader192.split, %.preheader.split, %.preheader194.split, %.preheader197.lr.ph
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %84 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %77) #6
  store ptr %84, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  %85 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %77) #6
  store ptr %85, ptr %10, align 8
  %86 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  br i1 %86, label %.lr.ph600, label %..loopexit204_crit_edge

..loopexit204_crit_edge:                          ; preds = %89, %..loopexit196_crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  br label %.loopexit246

.lr.ph600:                                        ; preds = %..loopexit196_crit_edge, %89
  %87 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #6
  %88 = getelementptr inbounds i8, ptr %87, i64 16
  invoke void @_ZN16HMTypeInferrence19expand_ivars_paramsERN3HIR10PathParamsE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(24) %88)
          to label %89 unwind label %92

89:                                               ; preds = %.lr.ph600
  %90 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #6
  %91 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  br i1 %91, label %.lr.ph600, label %..loopexit204_crit_edge

92:                                               ; preds = %.lr.ph600
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  br label %115

.split487:                                        ; preds = %.preheader228.split
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %115

.split455:                                        ; preds = %.preheader230.split
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %115

..loopexit207_crit_edge:                          ; preds = %97, %.preheader232.split.split
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %.loopexit246

.lr.ph413:                                        ; preds = %.preheader232.split.split, %97
  %96 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %96)
          to label %97 unwind label %.split418.split

97:                                               ; preds = %.lr.ph413
  %98 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  %99 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #6
  br i1 %99, label %.lr.ph413, label %..loopexit207_crit_edge

.split418.split:                                  ; preds = %.lr.ph413
  %100 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %115

.split385:                                        ; preds = %.preheader234.split
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %115

.split357:                                        ; preds = %.preheader236.split
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %115

.split330:                                        ; preds = %.preheader238.split
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %115

.split.split:                                     ; preds = %.preheader240.split.split
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %115

105:                                              ; preds = %.preheader240.split.split
  %106 = getelementptr inbounds i8, ptr %34, i64 120
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  %107 = call ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %106) #6
  store ptr %107, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  %108 = call ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %106) #6
  store ptr %108, ptr %14, align 8
  %109 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #6
  br i1 %109, label %.lr.ph288, label %..loopexit211_crit_edge

..loopexit211_crit_edge:                          ; preds = %111, %105
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  br label %.loopexit246

.lr.ph288:                                        ; preds = %105, %111
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #6
  invoke void @_ZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %110)
          to label %111 unwind label %.split293.split

111:                                              ; preds = %.lr.ph288
  %112 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #6
  %113 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #6
  br i1 %113, label %.lr.ph288, label %..loopexit211_crit_edge

.split293.split:                                  ; preds = %.lr.ph288
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  br label %115

115:                                              ; preds = %.split.split, %.split293.split, %92, %.split525.split.split, %.split534.split.split, %.split609.split, %.split612.split, %.split825.split, %.split828.split, %.split330, %.split357, %.split385, %.split418.split, %.split455, %.split487, %.split701
  %.pn.pn = phi { ptr, i32 } [ %103, %.split330 ], [ %102, %.split357 ], [ %101, %.split385 ], [ %100, %.split418.split ], [ %95, %.split455 ], [ %94, %.split487 ], [ %62, %.split701 ], [ %61, %.split828.split ], [ %60, %.split825.split ], [ %74, %.split612.split ], [ %63, %.split609.split ], [ %93, %92 ], [ %83, %.split525.split.split ], [ %82, %.split534.split.split ], [ %114, %.split293.split ], [ %104, %.split.split ]
  call void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_D2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  resume { ptr, i32 } %.pn.pn

116:                                              ; preds = %29, %.loopexit246
  ret void
}

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

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

; Function Attrs: nounwind
declare i32 @__cxa_thread_atexit(ptr, ptr, ptr) local_unnamed_addr #6

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #7

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_C2EPKS1_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef) unnamed_addr #5 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1H17expand_ivars_pathERS_RNS0_4PathE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZZN16HMTypeInferrence12expand_ivarsERN3HIR7TypeRefEEN1_D2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nounwind }
attributes #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"branch_weights", i32 1, i32 1023}
!6 = !{!7, !7, i64 0}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !11}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !11}
!17 = distinct !{!17, !11}
!18 = distinct !{!18, !11}


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