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

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

%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.337 = type { ptr, ptr }
%class.anon.338 = type { ptr, ptr }
%class.anon.354 = type { ptr, ptr, ptr }
%class.anon.355 = type { ptr, ptr }
%class.anon.356 = type { ptr }
%class.anon.360 = type { ptr }
%class.anon.363 = type { ptr, ptr, ptr }
%class.anon.364 = type { i8 }
%class.anon.365 = type { ptr, ptr }
%class.anon.366 = type { ptr, ptr }
%class.anon.367 = type { ptr, ptr }
%class.anon.368 = type { ptr, ptr }
%class.anon.369 = type { ptr, ptr }
%class.anon.370 = type { i8 }
%class.anon.382 = type { ptr }
%class.anon.383 = type { ptr }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.236" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.236" = type { %"struct.std::_Vector_base.237" }
%"struct.std::_Vector_base.237" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.384 = type { i8 }
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"class.HIR::TypeRef" = type { ptr }
%"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.329", [8 x i8] }
%"class.std::unique_ptr.329" = type { %"struct.std::__uniq_ptr_data.330" }
%"struct.std::__uniq_ptr_data.330" = type { %"class.std::__uniq_ptr_impl.331" }
%"class.std::__uniq_ptr_impl.331" = type { %"class.std::tuple.332" }
%"class.std::tuple.332" = type { %"struct.std::_Tuple_impl.333" }
%"struct.std::_Tuple_impl.333" = type { %"struct.std::_Head_base.336" }
%"struct.std::_Head_base.336" = type { ptr }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.41, %class.ThinVector.42, %class.ThinVector.43 }
%class.ThinVector.41 = type { ptr }
%class.ThinVector.42 = type { ptr }
%class.ThinVector.43 = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.45" }
%"struct.std::_Head_base.45" = type { ptr }
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"class.HIR::GenericParams" = type { %"class.std::vector.197", %"class.std::vector.202", %"class.std::vector.207", %"class.std::vector.212" }
%"class.std::vector.197" = type { %"struct.std::_Vector_base.198" }
%"struct.std::_Vector_base.198" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.202" = type { %"struct.std::_Vector_base.203" }
%"struct.std::_Vector_base.203" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.207" = type { %"struct.std::_Vector_base.208" }
%"struct.std::_Vector_base.208" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.212" = type { %"struct.std::_Vector_base.213" }
%"struct.std::_Vector_base.213" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.339" }
%"class.std::vector.339" = type { %"struct.std::_Vector_base.340" }
%"struct.std::_Vector_base.340" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TraitMarkings" = type { i8, i8, i8, %"class.std::map.349" }
%"class.std::map.349" = type { %"class.std::_Rb_tree.350" }
%"class.std::_Rb_tree.350" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%"struct.HIR::VisEnt" = type { %"class.HIR::Publicity", %"class.HIR::TypeRef" }
%"class.HIR::Publicity" = type { %"class.std::shared_ptr.357" }
%"class.std::shared_ptr.357" = type { %"class.std::__shared_ptr.358" }
%"class.std::__shared_ptr.358" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.std::pair.361" = type { %class.RcString, %"struct.HIR::VisEnt" }
%"class.HIR::Union" = type { %"class.HIR::GenericParams", i32, %"class.std::vector.344", %"struct.HIR::TraitMarkings" }
%"class.std::vector.344" = type { %"struct.std::_Vector_base.345" }
%"struct.std::_Vector_base.345" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.HIR::Enum" = type { %"class.HIR::GenericParams", i8, i32, %"class.HIR::Enum::Class", %"struct.HIR::TraitMarkings" }
%"class.HIR::Enum::Class" = type { i32, %"union.HIR::Enum::Class::DataUnion" }
%"union.HIR::Enum::Class::DataUnion" = type { %"class.std::vector.372", [8 x i8] }
%"class.std::vector.372" = type { %"struct.std::_Vector_base.373" }
%"struct.std::_Vector_base.373" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::Enum::DataVariant" = type { %class.RcString, i8, %"class.HIR::TypeRef" }
%"class.MIR::TypeResolve" = type { i32, ptr, ptr, ptr, %struct.FmtLambda, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.FmtLambda = type { %"class.std::function" }

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

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

; Function Attrs: mustprogress uwtable
define dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca %"class.std::function", align 8
  %19 = alloca %class.anon.337, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca i8, align 1
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::function", align 8
  %29 = alloca %class.anon.338, align 8
  %30 = alloca i8, align 1
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca %class.anon.354, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.std::function", align 8
  %38 = alloca %class.anon.355, align 8
  %39 = alloca ptr, align 8
  %40 = alloca %"class.std::function", align 8
  %41 = alloca %class.anon.356, align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"class.std::function", align 8
  %44 = alloca %class.anon.360, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca %class.anon.363, align 8
  %48 = alloca %"class.std::function", align 8
  %49 = alloca %class.anon.364, align 1
  %50 = alloca ptr, align 8
  %51 = alloca %"class.std::function", align 8
  %52 = alloca %class.anon.365, align 8
  %53 = alloca i8, align 1
  %54 = alloca i8, align 1
  %55 = alloca i8, align 1
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca %"class.std::function", align 8
  %59 = alloca %class.anon.366, align 8
  %60 = alloca i8, align 1
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca %"class.std::function", align 8
  %65 = alloca %class.anon.367, align 8
  %66 = alloca i8, align 1
  %67 = alloca ptr, align 8
  %68 = alloca i8, align 1
  %69 = alloca ptr, align 8
  %70 = alloca i8, align 1
  %71 = alloca i32, align 4
  %72 = alloca i8, align 1
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca %"class.std::function", align 8
  %76 = alloca %class.anon.368, align 8
  %77 = alloca i8, align 1
  %78 = alloca ptr, align 8
  %79 = alloca i8, align 1
  %80 = alloca ptr, align 8
  %81 = alloca i8, align 1
  %82 = alloca i32, align 4
  %83 = alloca i8, align 1
  %84 = alloca ptr, align 8
  %85 = alloca ptr, align 8
  %86 = alloca %"class.std::function", align 8
  %87 = alloca %class.anon.369, align 8
  %88 = alloca i8, align 1
  %89 = alloca ptr, align 8
  %90 = alloca %"class.std::function", align 8
  %91 = alloca %class.anon.370, align 1
  %92 = alloca ptr, align 8
  %93 = alloca %"class.std::function", align 8
  %94 = alloca %class.anon.382, align 8
  %95 = alloca ptr, align 8
  %96 = alloca %"class.std::function", align 8
  %97 = alloca %class.anon.383, align 8
  %98 = alloca ptr, align 8
  %99 = alloca ptr, align 8
  %100 = alloca %struct.MonomorphStatePtr, align 8
  %101 = alloca ptr, align 8
  %102 = alloca %"class.std::function", align 8
  %103 = alloca %class.anon.384, align 1
  %104 = alloca ptr, align 8
  %105 = alloca ptr, align 8
  %106 = alloca %struct.MonomorphStatePtr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  %107 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #6
  store i8 1, ptr %10, align 1, !tbaa !9
  br label %108

108:                                              ; preds = %930, %4
  %109 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %110 = trunc i8 %109 to i1
  br i1 %110, label %112, label %111

111:                                              ; preds = %108
  store i32 2, ptr %11, align 4
  br label %931

112:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %113 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %113, ptr %12, align 8, !tbaa !5
  br label %114

114:                                              ; preds = %925, %112
  %115 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %116 = trunc i8 %115 to i1
  br i1 %116, label %118, label %117

117:                                              ; preds = %114
  store i32 5, ptr %11, align 4
  br label %926

118:                                              ; preds = %114
  %119 = load ptr, ptr %12, align 8, !tbaa !5
  %120 = call noundef i32 @_ZNK3MIR6LValue7Wrapper3tagEv(ptr noundef nonnull align 4 dereferenceable(4) %119)
  switch i32 %120, label %924 [
    i32 4, label %121
    i32 1, label %122
    i32 0, label %452
    i32 3, label %604
    i32 2, label %710
  ]

121:                                              ; preds = %118
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 112, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

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

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

126:                                              ; preds = %123
  store i32 9, ptr %11, align 4
  br label %449

127:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %128 = load ptr, ptr %12, align 8, !tbaa !5
  %129 = call noundef i32 @_ZNK3MIR6LValue7Wrapper8as_FieldEv(ptr noundef nonnull align 4 dereferenceable(4) %128)
  store i32 %129, ptr %14, align 4, !tbaa !13
  br label %130

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

133:                                              ; preds = %130
  store i32 12, ptr %11, align 4
  br label %445

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

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

138:                                              ; preds = %135
  store i32 15, ptr %11, align 4
  br label %441

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

142:                                              ; preds = %435, %139
  %143 = load i8, ptr %15, align 1, !tbaa !9, !range !11, !noundef !12
  %144 = trunc i8 %143 to i1
  br i1 %144, label %146, label %145

145:                                              ; preds = %142
  store i32 18, ptr %11, align 4
  br label %436

146:                                              ; preds = %142
  %147 = load ptr, ptr %16, align 8, !tbaa !5
  %148 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %147)
  switch i32 %148, label %150 [
    i32 0, label %149
    i32 8, label %163
    i32 9, label %187
    i32 10, label %211
    i32 4, label %255
  ]

149:                                              ; preds = %146
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 114, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

150:                                              ; preds = %146
  br label %151

151:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #6
  %152 = getelementptr inbounds %class.anon.337, ptr %19, i32 0, i32 0
  store ptr %17, ptr %152, align 8, !tbaa !5
  %153 = getelementptr inbounds %class.anon.337, ptr %19, i32 0, i32 1
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %154, ptr %153, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(16) %19) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %18)
          to label %155 unwind label %157

155:                                              ; preds = %151
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #6
  %156 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %156, align 16, !tbaa !5
  call void @__cxa_throw(ptr %156, ptr @_ZTIPKc, ptr null) #8
  unreachable

157:                                              ; preds = %151
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %20, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %438

161:                                              ; No predecessors!
  br label %162

162:                                              ; preds = %161
  br label %434

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

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

167:                                              ; preds = %164
  store i32 24, ptr %11, align 4
  br label %184

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

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

175:                                              ; preds = %171
  store i32 27, ptr %11, align 4
  br label %180

176:                                              ; preds = %171
  %177 = load ptr, ptr %23, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %177, i32 0, i32 0
  store ptr %178, ptr %5, align 8
  store i32 1, ptr %11, align 4
  br label %180

179:                                              ; No predecessors!
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %171, !llvm.loop !15

180:                                              ; preds = %176, %175
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  %181 = load i32, ptr %11, align 4
  switch i32 %181, label %184 [
    i32 27, label %182
  ]

182:                                              ; preds = %180
  br label %183

183:                                              ; preds = %182
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %164, !llvm.loop !17

184:                                              ; preds = %180, %167
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  %185 = load i32, ptr %11, align 4
  switch i32 %185, label %436 [
    i32 24, label %186
  ]

186:                                              ; preds = %184
  br label %434

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

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

191:                                              ; preds = %188
  store i32 30, ptr %11, align 4
  br label %208

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

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

199:                                              ; preds = %195
  store i32 33, ptr %11, align 4
  br label %204

200:                                              ; preds = %195
  %201 = load ptr, ptr %25, align 8, !tbaa !5
  %202 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %201, i32 0, i32 0
  store ptr %202, ptr %5, align 8
  store i32 1, ptr %11, align 4
  br label %204

203:                                              ; No predecessors!
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %195, !llvm.loop !18

204:                                              ; preds = %200, %199
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  %205 = load i32, ptr %11, align 4
  switch i32 %205, label %208 [
    i32 33, label %206
  ]

206:                                              ; preds = %204
  br label %207

207:                                              ; preds = %206
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %188, !llvm.loop !19

208:                                              ; preds = %204, %191
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  %209 = load i32, ptr %11, align 4
  switch i32 %209, label %436 [
    i32 30, label %210
  ]

210:                                              ; preds = %208
  br label %434

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

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

215:                                              ; preds = %212
  store i32 36, ptr %11, align 4
  br label %252

216:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %217 = load ptr, ptr %16, align 8, !tbaa !5
  %218 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %217)
  store ptr %218, ptr %27, align 8, !tbaa !5
  br label %219

219:                                              ; preds = %247, %216
  %220 = load ptr, ptr %27, align 8, !tbaa !5
  %221 = load i8, ptr %26, align 1, !tbaa !9, !range !11, !noundef !12
  %222 = trunc i8 %221 to i1
  br i1 %222, label %224, label %223

223:                                              ; preds = %219
  store i32 39, ptr %11, align 4
  br label %248

224:                                              ; preds = %219
  br label %225

225:                                              ; preds = %224
  %226 = load i32, ptr %14, align 4, !tbaa !13
  %227 = zext i32 %226 to i64
  %228 = load ptr, ptr %27, align 8, !tbaa !5
  %229 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %228) #6
  %230 = icmp ult i64 %227, %229
  br i1 %230, label %240, label %231

231:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #6
  %232 = getelementptr inbounds %class.anon.338, ptr %29, i32 0, i32 0
  store ptr %14, ptr %232, align 8, !tbaa !5
  %233 = getelementptr inbounds %class.anon.338, ptr %29, i32 0, i32 1
  %234 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %234, ptr %233, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(16) %29) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %28)
          to label %235 unwind label %236

235:                                              ; preds = %231
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #6
  br label %240

236:                                              ; preds = %231
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %20, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #6
  br label %438

240:                                              ; preds = %235, %225
  br label %241

241:                                              ; preds = %240
  br label %242

242:                                              ; preds = %241
  %243 = load ptr, ptr %27, align 8, !tbaa !5
  %244 = load i32, ptr %14, align 4, !tbaa !13
  %245 = zext i32 %244 to i64
  %246 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %243, i64 noundef %245) #6
  store ptr %246, ptr %5, align 8
  store i32 1, ptr %11, align 4
  br label %248

247:                                              ; No predecessors!
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %219, !llvm.loop !20

248:                                              ; preds = %242, %223
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  %249 = load i32, ptr %11, align 4
  switch i32 %249, label %252 [
    i32 39, label %250
  ]

250:                                              ; preds = %248
  br label %251

251:                                              ; preds = %250
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %212, !llvm.loop !21

252:                                              ; preds = %248, %215
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #6
  %253 = load i32, ptr %11, align 4
  switch i32 %253, label %436 [
    i32 36, label %254
  ]

254:                                              ; preds = %252
  br label %434

255:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #6
  store i8 1, ptr %30, align 1, !tbaa !9
  br label %256

256:                                              ; preds = %430, %255
  %257 = load i8, ptr %30, align 1, !tbaa !9, !range !11, !noundef !12
  %258 = trunc i8 %257 to i1
  br i1 %258, label %260, label %259

259:                                              ; preds = %256
  store i32 44, ptr %11, align 4
  br label %431

260:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %261 = load ptr, ptr %16, align 8, !tbaa !5
  %262 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %261)
  store ptr %262, ptr %31, align 8, !tbaa !5
  br label %263

263:                                              ; preds = %425, %260
  %264 = load ptr, ptr %31, align 8, !tbaa !5
  %265 = load i8, ptr %30, align 1, !tbaa !9, !range !11, !noundef !12
  %266 = trunc i8 %265 to i1
  br i1 %266, label %268, label %267

267:                                              ; preds = %263
  store i32 47, ptr %11, align 4
  br label %427

268:                                              ; preds = %263
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %269 = load ptr, ptr %31, align 8, !tbaa !5
  %270 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %269, i32 0, i32 1
  %271 = call noundef ptr @_ZNK3HIR15TypePathBinding10opt_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %270)
  store ptr %271, ptr %32, align 8, !tbaa !5
  %272 = load ptr, ptr %32, align 8, !tbaa !5
  %273 = icmp ne ptr %272, null
  br i1 %273, label %274, label %365

274:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %275 = load ptr, ptr %32, align 8, !tbaa !5
  %276 = load ptr, ptr %275, align 8, !tbaa !5
  store ptr %276, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %34) #6
  %277 = getelementptr inbounds %class.anon.354, ptr %34, i32 0, i32 0
  store ptr %107, ptr %277, align 8, !tbaa !22
  %278 = getelementptr inbounds %class.anon.354, ptr %34, i32 0, i32 1
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %279, ptr %278, align 8, !tbaa !5
  %280 = getelementptr inbounds %class.anon.354, ptr %34, i32 0, i32 2
  %281 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %281, ptr %280, align 8, !tbaa !5
  %282 = load ptr, ptr %33, align 8, !tbaa !5
  %283 = getelementptr inbounds %"class.HIR::Struct", ptr %282, i32 0, i32 3
  %284 = call noundef i32 @_ZNK3HIR6Struct4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(32) %283)
  switch i32 %284, label %360 [
    i32 0, label %285
    i32 1, label %286
    i32 2, label %303
    i32 3, label %331
  ]

285:                                              ; preds = %274
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 148, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

286:                                              ; preds = %274
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %287 = load ptr, ptr %33, align 8, !tbaa !5
  %288 = getelementptr inbounds %"class.HIR::Struct", ptr %287, i32 0, i32 3
  %289 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR6Struct4Data7as_UnitEv(ptr noundef nonnull align 8 dereferenceable(32) %288)
  store ptr %289, ptr %35, align 8, !tbaa !5
  %290 = load ptr, ptr %35, align 8, !tbaa !5
  br label %291

291:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #6
  %292 = getelementptr inbounds %class.anon.355, ptr %38, i32 0, i32 0
  store ptr %36, ptr %292, align 8, !tbaa !5
  %293 = getelementptr inbounds %class.anon.355, ptr %38, i32 0, i32 1
  %294 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %294, ptr %293, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 8 dereferenceable(16) %38) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %37)
          to label %295 unwind label %297

295:                                              ; preds = %291
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #6
  %296 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %296, align 16, !tbaa !5
  call void @__cxa_throw(ptr %296, ptr @_ZTIPKc, ptr null) #8
  unreachable

297:                                              ; preds = %291
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %20, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %364

301:                                              ; No predecessors!
  br label %302

302:                                              ; preds = %301
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %360

303:                                              ; preds = %274
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %304 = load ptr, ptr %33, align 8, !tbaa !5
  %305 = getelementptr inbounds %"class.HIR::Struct", ptr %304, i32 0, i32 3
  %306 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %305)
  store ptr %306, ptr %39, align 8, !tbaa !5
  %307 = load ptr, ptr %39, align 8, !tbaa !5
  br label %308

308:                                              ; preds = %303
  %309 = load i32, ptr %14, align 4, !tbaa !13
  %310 = zext i32 %309 to i64
  %311 = load ptr, ptr %39, align 8, !tbaa !5
  %312 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %311) #6
  %313 = icmp ult i64 %310, %312
  br i1 %313, label %322, label %314

314:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  %315 = getelementptr inbounds %class.anon.356, ptr %41, i32 0, i32 0
  %316 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %316, ptr %315, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %40)
          to label %317 unwind label %318

317:                                              ; preds = %314
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  br label %322

318:                                              ; preds = %314
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %20, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %364

322:                                              ; preds = %317, %308
  br label %323

323:                                              ; preds = %322
  br label %324

324:                                              ; preds = %323
  %325 = load ptr, ptr %39, align 8, !tbaa !5
  %326 = load i32, ptr %14, align 4, !tbaa !13
  %327 = zext i32 %326 to i64
  %328 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %325, i64 noundef %327) #6
  %329 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %328, i32 0, i32 1
  %330 = call noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK3$_4clIS2_EERKDaRKT_"(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(8) %329)
  store ptr %330, ptr %5, align 8
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %361

331:                                              ; preds = %274
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %332 = load ptr, ptr %33, align 8, !tbaa !5
  %333 = getelementptr inbounds %"class.HIR::Struct", ptr %332, i32 0, i32 3
  %334 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_NamedEv(ptr noundef nonnull align 8 dereferenceable(32) %333)
  store ptr %334, ptr %42, align 8, !tbaa !5
  %335 = load ptr, ptr %42, align 8, !tbaa !5
  br label %336

336:                                              ; preds = %331
  %337 = load i32, ptr %14, align 4, !tbaa !13
  %338 = zext i32 %337 to i64
  %339 = load ptr, ptr %42, align 8, !tbaa !5
  %340 = call noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %339) #6
  %341 = icmp ult i64 %338, %340
  br i1 %341, label %350, label %342

342:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %343 = getelementptr inbounds %class.anon.360, ptr %44, i32 0, i32 0
  %344 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %344, ptr %343, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %43)
          to label %345 unwind label %346

345:                                              ; preds = %342
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  br label %350

346:                                              ; preds = %342
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %20, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %364

350:                                              ; preds = %345, %336
  br label %351

351:                                              ; preds = %350
  br label %352

352:                                              ; preds = %351
  %353 = load ptr, ptr %42, align 8, !tbaa !5
  %354 = load i32, ptr %14, align 4, !tbaa !13
  %355 = zext i32 %354 to i64
  %356 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %353, i64 noundef %355) #6
  %357 = getelementptr inbounds %"struct.std::pair.361", ptr %356, i32 0, i32 1
  %358 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %357, i32 0, i32 1
  %359 = call noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK3$_4clIS2_EERKDaRKT_"(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(8) %358)
  store ptr %359, ptr %5, align 8
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %361

360:                                              ; preds = %302, %274
  store i32 0, ptr %11, align 4
  br label %361

361:                                              ; preds = %360, %352, %324
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  %362 = load i32, ptr %11, align 4
  switch i32 %362, label %422 [
    i32 0, label %363
  ]

363:                                              ; preds = %361
  br label %421

364:                                              ; preds = %346, %318, %297
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %426

365:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %366 = load ptr, ptr %31, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %366, i32 0, i32 1
  %368 = call noundef ptr @_ZNK3HIR15TypePathBinding9opt_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %367)
  store ptr %368, ptr %45, align 8, !tbaa !5
  %369 = load ptr, ptr %45, align 8, !tbaa !5
  %370 = icmp ne ptr %369, null
  br i1 %370, label %371, label %403

371:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %372 = load ptr, ptr %45, align 8, !tbaa !5
  %373 = load ptr, ptr %372, align 8, !tbaa !5
  store ptr %373, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #6
  %374 = getelementptr inbounds %class.anon.363, ptr %47, i32 0, i32 0
  store ptr %107, ptr %374, align 8, !tbaa !24
  %375 = getelementptr inbounds %class.anon.363, ptr %47, i32 0, i32 1
  %376 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %376, ptr %375, align 8, !tbaa !5
  %377 = getelementptr inbounds %class.anon.363, ptr %47, i32 0, i32 2
  %378 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %378, ptr %377, align 8, !tbaa !5
  br label %379

379:                                              ; preds = %371
  %380 = load i32, ptr %14, align 4, !tbaa !13
  %381 = zext i32 %380 to i64
  %382 = load ptr, ptr %46, align 8, !tbaa !5
  %383 = getelementptr inbounds %"class.HIR::Union", ptr %382, i32 0, i32 2
  %384 = call noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %383) #6
  %385 = icmp ult i64 %381, %384
  br i1 %385, label %392, label %386

386:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #6
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(1) %49) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %48)
          to label %387 unwind label %388

387:                                              ; preds = %386
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #6
  br label %392

388:                                              ; preds = %386
  %389 = landingpad { ptr, i32 }
          cleanup
  %390 = extractvalue { ptr, i32 } %389, 0
  store ptr %390, ptr %20, align 8
  %391 = extractvalue { ptr, i32 } %389, 1
  store i32 %391, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %420

392:                                              ; preds = %387, %379
  br label %393

393:                                              ; preds = %392
  br label %394

394:                                              ; preds = %393
  %395 = load ptr, ptr %46, align 8, !tbaa !5
  %396 = getelementptr inbounds %"class.HIR::Union", ptr %395, i32 0, i32 2
  %397 = load i32, ptr %14, align 4, !tbaa !13
  %398 = zext i32 %397 to i64
  %399 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %396, i64 noundef %398)
  %400 = getelementptr inbounds %"struct.std::pair.361", ptr %399, i32 0, i32 1
  %401 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %400, i32 0, i32 1
  %402 = call noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK4$_16clES9_"(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(8) %401)
  store ptr %402, ptr %5, align 8
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %417

403:                                              ; preds = %365
  br label %404

404:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #6
  %405 = getelementptr inbounds %class.anon.365, ptr %52, i32 0, i32 0
  store ptr %50, ptr %405, align 8, !tbaa !5
  %406 = getelementptr inbounds %class.anon.365, ptr %52, i32 0, i32 1
  %407 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %407, ptr %406, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(16) %52) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %51)
          to label %408 unwind label %410

408:                                              ; preds = %404
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #6
  %409 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %409, align 16, !tbaa !5
  call void @__cxa_throw(ptr %409, ptr @_ZTIPKc, ptr null) #8
  unreachable

410:                                              ; preds = %404
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %20, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  br label %420

414:                                              ; No predecessors!
  br label %415

415:                                              ; preds = %414
  br label %416

416:                                              ; preds = %415
  store i32 0, ptr %11, align 4
  br label %417

417:                                              ; preds = %416, %394
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  %418 = load i32, ptr %11, align 4
  switch i32 %418, label %422 [
    i32 0, label %419
  ]

419:                                              ; preds = %417
  br label %421

420:                                              ; preds = %410, %388
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  br label %426

421:                                              ; preds = %419, %363
  store i32 0, ptr %11, align 4
  br label %422

422:                                              ; preds = %421, %417, %361
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  %423 = load i32, ptr %11, align 4
  switch i32 %423, label %427 [
    i32 0, label %424
  ]

424:                                              ; preds = %422
  br label %425

425:                                              ; preds = %424
  store i8 0, ptr %30, align 1, !tbaa !9
  br label %263, !llvm.loop !26

426:                                              ; preds = %420, %364
  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 1, ptr %30) #6
  br label %438

427:                                              ; preds = %422, %267
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  %428 = load i32, ptr %11, align 4
  switch i32 %428, label %431 [
    i32 47, label %429
  ]

429:                                              ; preds = %427
  br label %430

430:                                              ; preds = %429
  store i8 0, ptr %30, align 1, !tbaa !9
  br label %256, !llvm.loop !27

431:                                              ; preds = %427, %259
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #6
  %432 = load i32, ptr %11, align 4
  switch i32 %432, label %436 [
    i32 44, label %433
  ]

433:                                              ; preds = %431
  br label %434

434:                                              ; preds = %433, %254, %210, %186, %162
  br label %435

435:                                              ; preds = %434
  store i8 0, ptr %15, align 1, !tbaa !9
  br label %142, !llvm.loop !28

436:                                              ; preds = %431, %252, %208, %184, %145
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  %437 = load i32, ptr %11, align 4
  switch i32 %437, label %441 [
    i32 18, label %439
  ]

438:                                              ; preds = %426, %236, %157
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #6
  br label %928

439:                                              ; preds = %436
  br label %440

440:                                              ; preds = %439
  store i8 0, ptr %15, align 1, !tbaa !9
  br label %135, !llvm.loop !29

441:                                              ; preds = %436, %138
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  %442 = load i32, ptr %11, align 4
  switch i32 %442, label %445 [
    i32 15, label %443
  ]

443:                                              ; preds = %441
  br label %444

444:                                              ; preds = %443
  store i8 0, ptr %13, align 1, !tbaa !9
  br label %130, !llvm.loop !30

445:                                              ; preds = %441, %133
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  %446 = load i32, ptr %11, align 4
  switch i32 %446, label %449 [
    i32 12, label %447
  ]

447:                                              ; preds = %445
  br label %448

448:                                              ; preds = %447
  store i8 0, ptr %13, align 1, !tbaa !9
  br label %123, !llvm.loop !31

449:                                              ; preds = %445, %126
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #6
  %450 = load i32, ptr %11, align 4
  switch i32 %450, label %926 [
    i32 9, label %451
  ]

451:                                              ; preds = %449
  br label %924

452:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #6
  store i8 1, ptr %53, align 1, !tbaa !9
  br label %453

453:                                              ; preds = %600, %452
  %454 = load i8, ptr %53, align 1, !tbaa !9, !range !11, !noundef !12
  %455 = trunc i8 %454 to i1
  br i1 %455, label %457, label %456

456:                                              ; preds = %453
  store i32 61, ptr %11, align 4
  br label %601

457:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 1, ptr %54) #6
  %458 = load ptr, ptr %12, align 8, !tbaa !5
  %459 = call noundef signext i8 @_ZNK3MIR6LValue7Wrapper8as_DerefEv(ptr noundef nonnull align 4 dereferenceable(4) %458)
  store i8 %459, ptr %54, align 1, !tbaa !32
  br label %460

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

463:                                              ; preds = %460
  store i32 64, ptr %11, align 4
  br label %597

464:                                              ; preds = %460
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #6
  store i8 1, ptr %55, align 1, !tbaa !9
  br label %465

465:                                              ; preds = %592, %464
  %466 = load i8, ptr %55, align 1, !tbaa !9, !range !11, !noundef !12
  %467 = trunc i8 %466 to i1
  br i1 %467, label %469, label %468

468:                                              ; preds = %465
  store i32 67, ptr %11, align 4
  br label %593

469:                                              ; preds = %465
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  %470 = load ptr, ptr %9, align 8, !tbaa !5
  %471 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %470)
  store ptr %471, ptr %56, align 8, !tbaa !5
  br label %472

472:                                              ; preds = %587, %469
  %473 = load i8, ptr %55, align 1, !tbaa !9, !range !11, !noundef !12
  %474 = trunc i8 %473 to i1
  br i1 %474, label %476, label %475

475:                                              ; preds = %472
  store i32 70, ptr %11, align 4
  br label %588

476:                                              ; preds = %472
  %477 = load ptr, ptr %56, align 8, !tbaa !5
  %478 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %477)
  switch i32 %478, label %480 [
    i32 0, label %479
    i32 4, label %493
    i32 12, label %538
    i32 11, label %562
  ]

479:                                              ; preds = %476
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 167, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

480:                                              ; preds = %476
  br label %481

481:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #6
  %482 = getelementptr inbounds %class.anon.366, ptr %59, i32 0, i32 0
  store ptr %57, ptr %482, align 8, !tbaa !5
  %483 = getelementptr inbounds %class.anon.366, ptr %59, i32 0, i32 1
  %484 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %484, ptr %483, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 8 dereferenceable(16) %59) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %58)
          to label %485 unwind label %487

485:                                              ; preds = %481
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #6
  %486 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %486, align 16, !tbaa !5
  call void @__cxa_throw(ptr %486, ptr @_ZTIPKc, ptr null) #8
  unreachable

487:                                              ; preds = %481
  %488 = landingpad { ptr, i32 }
          cleanup
  %489 = extractvalue { ptr, i32 } %488, 0
  store ptr %489, ptr %20, align 8
  %490 = extractvalue { ptr, i32 } %488, 1
  store i32 %490, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  br label %590

491:                                              ; No predecessors!
  br label %492

492:                                              ; preds = %491
  br label %586

493:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #6
  store i8 1, ptr %60, align 1, !tbaa !9
  br label %494

494:                                              ; preds = %534, %493
  %495 = load i8, ptr %60, align 1, !tbaa !9, !range !11, !noundef !12
  %496 = trunc i8 %495 to i1
  br i1 %496, label %498, label %497

497:                                              ; preds = %494
  store i32 76, ptr %11, align 4
  br label %535

498:                                              ; preds = %494
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #6
  %499 = load ptr, ptr %56, align 8, !tbaa !5
  %500 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %499)
  store ptr %500, ptr %61, align 8, !tbaa !5
  br label %501

501:                                              ; preds = %530, %498
  %502 = load ptr, ptr %61, align 8, !tbaa !5
  %503 = load i8, ptr %60, align 1, !tbaa !9, !range !11, !noundef !12
  %504 = trunc i8 %503 to i1
  br i1 %504, label %506, label %505

505:                                              ; preds = %501
  store i32 79, ptr %11, align 4
  br label %531

506:                                              ; preds = %501
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #6
  %507 = load ptr, ptr %9, align 8, !tbaa !5
  %508 = call noundef ptr @_ZNK3MIR11TypeResolve17is_type_owned_boxERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef nonnull align 8 dereferenceable(8) %507)
  store ptr %508, ptr %62, align 8, !tbaa !5
  %509 = load ptr, ptr %62, align 8, !tbaa !5
  %510 = icmp ne ptr %509, null
  br i1 %510, label %511, label %513

511:                                              ; preds = %506
  %512 = load ptr, ptr %62, align 8, !tbaa !5
  store ptr %512, ptr %5, align 8
  store i32 1, ptr %11, align 4
  br label %527

513:                                              ; preds = %506
  br label %514

514:                                              ; preds = %513
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #6
  %515 = getelementptr inbounds %class.anon.367, ptr %65, i32 0, i32 0
  store ptr %63, ptr %515, align 8, !tbaa !5
  %516 = getelementptr inbounds %class.anon.367, ptr %65, i32 0, i32 1
  %517 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %517, ptr %516, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 8 dereferenceable(16) %65) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %64)
          to label %518 unwind label %520

518:                                              ; preds = %514
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #6
  %519 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %519, align 16, !tbaa !5
  call void @__cxa_throw(ptr %519, ptr @_ZTIPKc, ptr null) #8
  unreachable

520:                                              ; preds = %514
  %521 = landingpad { ptr, i32 }
          cleanup
  %522 = extractvalue { ptr, i32 } %521, 0
  store ptr %522, ptr %20, align 8
  %523 = extractvalue { ptr, i32 } %521, 1
  store i32 %523, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #6
  br label %590

524:                                              ; No predecessors!
  br label %525

525:                                              ; preds = %524
  br label %526

526:                                              ; preds = %525
  store i32 0, ptr %11, align 4
  br label %527

527:                                              ; preds = %526, %511
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  %528 = load i32, ptr %11, align 4
  switch i32 %528, label %531 [
    i32 0, label %529
  ]

529:                                              ; preds = %527
  br label %530

530:                                              ; preds = %529
  store i8 0, ptr %60, align 1, !tbaa !9
  br label %501, !llvm.loop !33

531:                                              ; preds = %527, %505
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #6
  %532 = load i32, ptr %11, align 4
  switch i32 %532, label %535 [
    i32 79, label %533
  ]

533:                                              ; preds = %531
  br label %534

534:                                              ; preds = %533
  store i8 0, ptr %60, align 1, !tbaa !9
  br label %494, !llvm.loop !34

535:                                              ; preds = %531, %497
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #6
  %536 = load i32, ptr %11, align 4
  switch i32 %536, label %588 [
    i32 76, label %537
  ]

537:                                              ; preds = %535
  br label %586

538:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #6
  store i8 1, ptr %66, align 1, !tbaa !9
  br label %539

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

542:                                              ; preds = %539
  store i32 84, ptr %11, align 4
  br label %559

543:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #6
  %544 = load ptr, ptr %56, align 8, !tbaa !5
  %545 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %544)
  store ptr %545, ptr %67, align 8, !tbaa !5
  br label %546

546:                                              ; preds = %554, %543
  %547 = load ptr, ptr %67, align 8, !tbaa !5
  %548 = load i8, ptr %66, align 1, !tbaa !9, !range !11, !noundef !12
  %549 = trunc i8 %548 to i1
  br i1 %549, label %551, label %550

550:                                              ; preds = %546
  store i32 87, ptr %11, align 4
  br label %555

551:                                              ; preds = %546
  %552 = load ptr, ptr %67, align 8, !tbaa !5
  %553 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %552, i32 0, i32 1
  store ptr %553, ptr %5, align 8
  store i32 1, ptr %11, align 4
  br label %555

554:                                              ; No predecessors!
  store i8 0, ptr %66, align 1, !tbaa !9
  br label %546, !llvm.loop !35

555:                                              ; preds = %551, %550
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #6
  %556 = load i32, ptr %11, align 4
  switch i32 %556, label %559 [
    i32 87, label %557
  ]

557:                                              ; preds = %555
  br label %558

558:                                              ; preds = %557
  store i8 0, ptr %66, align 1, !tbaa !9
  br label %539, !llvm.loop !36

559:                                              ; preds = %555, %542
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #6
  %560 = load i32, ptr %11, align 4
  switch i32 %560, label %588 [
    i32 84, label %561
  ]

561:                                              ; preds = %559
  br label %586

562:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 1, ptr %68) #6
  store i8 1, ptr %68, align 1, !tbaa !9
  br label %563

563:                                              ; preds = %582, %562
  %564 = load i8, ptr %68, align 1, !tbaa !9, !range !11, !noundef !12
  %565 = trunc i8 %564 to i1
  br i1 %565, label %567, label %566

566:                                              ; preds = %563
  store i32 90, ptr %11, align 4
  br label %583

567:                                              ; preds = %563
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #6
  %568 = load ptr, ptr %56, align 8, !tbaa !5
  %569 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %568)
  store ptr %569, ptr %69, align 8, !tbaa !5
  br label %570

570:                                              ; preds = %578, %567
  %571 = load ptr, ptr %69, align 8, !tbaa !5
  %572 = load i8, ptr %68, align 1, !tbaa !9, !range !11, !noundef !12
  %573 = trunc i8 %572 to i1
  br i1 %573, label %575, label %574

574:                                              ; preds = %570
  store i32 93, ptr %11, align 4
  br label %579

575:                                              ; preds = %570
  %576 = load ptr, ptr %69, align 8, !tbaa !5
  %577 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %576, i32 0, i32 2
  store ptr %577, ptr %5, align 8
  store i32 1, ptr %11, align 4
  br label %579

578:                                              ; No predecessors!
  store i8 0, ptr %68, align 1, !tbaa !9
  br label %570, !llvm.loop !37

579:                                              ; preds = %575, %574
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #6
  %580 = load i32, ptr %11, align 4
  switch i32 %580, label %583 [
    i32 93, label %581
  ]

581:                                              ; preds = %579
  br label %582

582:                                              ; preds = %581
  store i8 0, ptr %68, align 1, !tbaa !9
  br label %563, !llvm.loop !38

583:                                              ; preds = %579, %566
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #6
  %584 = load i32, ptr %11, align 4
  switch i32 %584, label %588 [
    i32 90, label %585
  ]

585:                                              ; preds = %583
  br label %586

586:                                              ; preds = %585, %561, %537, %492
  br label %587

587:                                              ; preds = %586
  store i8 0, ptr %55, align 1, !tbaa !9
  br label %472, !llvm.loop !39

588:                                              ; preds = %583, %559, %535, %475
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  %589 = load i32, ptr %11, align 4
  switch i32 %589, label %593 [
    i32 70, label %591
  ]

590:                                              ; preds = %520, %487
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #6
  br label %928

591:                                              ; preds = %588
  br label %592

592:                                              ; preds = %591
  store i8 0, ptr %55, align 1, !tbaa !9
  br label %465, !llvm.loop !40

593:                                              ; preds = %588, %468
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #6
  %594 = load i32, ptr %11, align 4
  switch i32 %594, label %597 [
    i32 67, label %595
  ]

595:                                              ; preds = %593
  br label %596

596:                                              ; preds = %595
  store i8 0, ptr %53, align 1, !tbaa !9
  br label %460, !llvm.loop !41

597:                                              ; preds = %593, %463
  call void @llvm.lifetime.end.p0(i64 1, ptr %54) #6
  %598 = load i32, ptr %11, align 4
  switch i32 %598, label %601 [
    i32 64, label %599
  ]

599:                                              ; preds = %597
  br label %600

600:                                              ; preds = %599
  store i8 0, ptr %53, align 1, !tbaa !9
  br label %453, !llvm.loop !42

601:                                              ; preds = %597, %456
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #6
  %602 = load i32, ptr %11, align 4
  switch i32 %602, label %926 [
    i32 61, label %603
  ]

603:                                              ; preds = %601
  br label %924

604:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 1, ptr %70) #6
  store i8 1, ptr %70, align 1, !tbaa !9
  br label %605

605:                                              ; preds = %706, %604
  %606 = load i8, ptr %70, align 1, !tbaa !9, !range !11, !noundef !12
  %607 = trunc i8 %606 to i1
  br i1 %607, label %609, label %608

608:                                              ; preds = %605
  store i32 96, ptr %11, align 4
  br label %707

609:                                              ; preds = %605
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #6
  %610 = load ptr, ptr %12, align 8, !tbaa !5
  %611 = call noundef i32 @_ZNK3MIR6LValue7Wrapper8as_IndexEv(ptr noundef nonnull align 4 dereferenceable(4) %610)
  store i32 %611, ptr %71, align 4, !tbaa !13
  br label %612

612:                                              ; preds = %702, %609
  %613 = load i8, ptr %70, align 1, !tbaa !9, !range !11, !noundef !12
  %614 = trunc i8 %613 to i1
  br i1 %614, label %616, label %615

615:                                              ; preds = %612
  store i32 99, ptr %11, align 4
  br label %703

616:                                              ; preds = %612
  call void @llvm.lifetime.start.p0(i64 1, ptr %72) #6
  store i8 1, ptr %72, align 1, !tbaa !9
  br label %617

617:                                              ; preds = %698, %616
  %618 = load i8, ptr %72, align 1, !tbaa !9, !range !11, !noundef !12
  %619 = trunc i8 %618 to i1
  br i1 %619, label %621, label %620

620:                                              ; preds = %617
  store i32 102, ptr %11, align 4
  br label %699

621:                                              ; preds = %617
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #6
  %622 = load ptr, ptr %9, align 8, !tbaa !5
  %623 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %622)
  store ptr %623, ptr %73, align 8, !tbaa !5
  br label %624

624:                                              ; preds = %694, %621
  %625 = load i8, ptr %72, align 1, !tbaa !9, !range !11, !noundef !12
  %626 = trunc i8 %625 to i1
  br i1 %626, label %628, label %627

627:                                              ; preds = %624
  store i32 105, ptr %11, align 4
  br label %695

628:                                              ; preds = %624
  %629 = load ptr, ptr %73, align 8, !tbaa !5
  %630 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %629)
  switch i32 %630, label %632 [
    i32 0, label %631
    i32 9, label %645
    i32 8, label %669
  ]

631:                                              ; preds = %628
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 188, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

632:                                              ; preds = %628
  br label %633

633:                                              ; preds = %632
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %76) #6
  %634 = getelementptr inbounds %class.anon.368, ptr %76, i32 0, i32 0
  store ptr %74, ptr %634, align 8, !tbaa !5
  %635 = getelementptr inbounds %class.anon.368, ptr %76, i32 0, i32 1
  %636 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %636, ptr %635, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 8 dereferenceable(16) %76) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %75)
          to label %637 unwind label %639

637:                                              ; preds = %633
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #6
  %638 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %638, align 16, !tbaa !5
  call void @__cxa_throw(ptr %638, ptr @_ZTIPKc, ptr null) #8
  unreachable

639:                                              ; preds = %633
  %640 = landingpad { ptr, i32 }
          cleanup
  %641 = extractvalue { ptr, i32 } %640, 0
  store ptr %641, ptr %20, align 8
  %642 = extractvalue { ptr, i32 } %640, 1
  store i32 %642, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #6
  br label %928

643:                                              ; No predecessors!
  br label %644

644:                                              ; preds = %643
  br label %693

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

646:                                              ; preds = %665, %645
  %647 = load i8, ptr %77, align 1, !tbaa !9, !range !11, !noundef !12
  %648 = trunc i8 %647 to i1
  br i1 %648, label %650, label %649

649:                                              ; preds = %646
  store i32 111, ptr %11, align 4
  br label %666

650:                                              ; preds = %646
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #6
  %651 = load ptr, ptr %73, align 8, !tbaa !5
  %652 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %651)
  store ptr %652, ptr %78, align 8, !tbaa !5
  br label %653

653:                                              ; preds = %661, %650
  %654 = load ptr, ptr %78, align 8, !tbaa !5
  %655 = load i8, ptr %77, align 1, !tbaa !9, !range !11, !noundef !12
  %656 = trunc i8 %655 to i1
  br i1 %656, label %658, label %657

657:                                              ; preds = %653
  store i32 114, ptr %11, align 4
  br label %662

658:                                              ; preds = %653
  %659 = load ptr, ptr %78, align 8, !tbaa !5
  %660 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %659, i32 0, i32 0
  store ptr %660, ptr %5, align 8
  store i32 1, ptr %11, align 4
  br label %662

661:                                              ; No predecessors!
  store i8 0, ptr %77, align 1, !tbaa !9
  br label %653, !llvm.loop !43

662:                                              ; preds = %658, %657
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #6
  %663 = load i32, ptr %11, align 4
  switch i32 %663, label %666 [
    i32 114, label %664
  ]

664:                                              ; preds = %662
  br label %665

665:                                              ; preds = %664
  store i8 0, ptr %77, align 1, !tbaa !9
  br label %646, !llvm.loop !44

666:                                              ; preds = %662, %649
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #6
  %667 = load i32, ptr %11, align 4
  switch i32 %667, label %695 [
    i32 111, label %668
  ]

668:                                              ; preds = %666
  br label %693

669:                                              ; preds = %628
  call void @llvm.lifetime.start.p0(i64 1, ptr %79) #6
  store i8 1, ptr %79, align 1, !tbaa !9
  br label %670

670:                                              ; preds = %689, %669
  %671 = load i8, ptr %79, align 1, !tbaa !9, !range !11, !noundef !12
  %672 = trunc i8 %671 to i1
  br i1 %672, label %674, label %673

673:                                              ; preds = %670
  store i32 117, ptr %11, align 4
  br label %690

674:                                              ; preds = %670
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #6
  %675 = load ptr, ptr %73, align 8, !tbaa !5
  %676 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %675)
  store ptr %676, ptr %80, align 8, !tbaa !5
  br label %677

677:                                              ; preds = %685, %674
  %678 = load ptr, ptr %80, align 8, !tbaa !5
  %679 = load i8, ptr %79, align 1, !tbaa !9, !range !11, !noundef !12
  %680 = trunc i8 %679 to i1
  br i1 %680, label %682, label %681

681:                                              ; preds = %677
  store i32 120, ptr %11, align 4
  br label %686

682:                                              ; preds = %677
  %683 = load ptr, ptr %80, align 8, !tbaa !5
  %684 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %683, i32 0, i32 0
  store ptr %684, ptr %5, align 8
  store i32 1, ptr %11, align 4
  br label %686

685:                                              ; No predecessors!
  store i8 0, ptr %79, align 1, !tbaa !9
  br label %677, !llvm.loop !45

686:                                              ; preds = %682, %681
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #6
  %687 = load i32, ptr %11, align 4
  switch i32 %687, label %690 [
    i32 120, label %688
  ]

688:                                              ; preds = %686
  br label %689

689:                                              ; preds = %688
  store i8 0, ptr %79, align 1, !tbaa !9
  br label %670, !llvm.loop !46

690:                                              ; preds = %686, %673
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #6
  %691 = load i32, ptr %11, align 4
  switch i32 %691, label %695 [
    i32 117, label %692
  ]

692:                                              ; preds = %690
  br label %693

693:                                              ; preds = %692, %668, %644
  br label %694

694:                                              ; preds = %693
  store i8 0, ptr %72, align 1, !tbaa !9
  br label %624, !llvm.loop !47

695:                                              ; preds = %690, %666, %627
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #6
  %696 = load i32, ptr %11, align 4
  switch i32 %696, label %699 [
    i32 105, label %697
  ]

697:                                              ; preds = %695
  br label %698

698:                                              ; preds = %697
  store i8 0, ptr %72, align 1, !tbaa !9
  br label %617, !llvm.loop !48

699:                                              ; preds = %695, %620
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #6
  %700 = load i32, ptr %11, align 4
  switch i32 %700, label %703 [
    i32 102, label %701
  ]

701:                                              ; preds = %699
  br label %702

702:                                              ; preds = %701
  store i8 0, ptr %70, align 1, !tbaa !9
  br label %612, !llvm.loop !49

703:                                              ; preds = %699, %615
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #6
  %704 = load i32, ptr %11, align 4
  switch i32 %704, label %707 [
    i32 99, label %705
  ]

705:                                              ; preds = %703
  br label %706

706:                                              ; preds = %705
  store i8 0, ptr %70, align 1, !tbaa !9
  br label %605, !llvm.loop !50

707:                                              ; preds = %703, %608
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #6
  %708 = load i32, ptr %11, align 4
  switch i32 %708, label %926 [
    i32 96, label %709
  ]

709:                                              ; preds = %707
  br label %924

710:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 1, ptr %81) #6
  store i8 1, ptr %81, align 1, !tbaa !9
  br label %711

711:                                              ; preds = %920, %710
  %712 = load i8, ptr %81, align 1, !tbaa !9, !range !11, !noundef !12
  %713 = trunc i8 %712 to i1
  br i1 %713, label %715, label %714

714:                                              ; preds = %711
  store i32 123, ptr %11, align 4
  br label %921

715:                                              ; preds = %711
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #6
  %716 = load ptr, ptr %12, align 8, !tbaa !5
  %717 = call noundef i32 @_ZNK3MIR6LValue7Wrapper11as_DowncastEv(ptr noundef nonnull align 4 dereferenceable(4) %716)
  store i32 %717, ptr %82, align 4, !tbaa !13
  br label %718

718:                                              ; preds = %916, %715
  %719 = load i8, ptr %81, align 1, !tbaa !9, !range !11, !noundef !12
  %720 = trunc i8 %719 to i1
  br i1 %720, label %722, label %721

721:                                              ; preds = %718
  store i32 126, ptr %11, align 4
  br label %917

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

723:                                              ; preds = %912, %722
  %724 = load i8, ptr %83, align 1, !tbaa !9, !range !11, !noundef !12
  %725 = trunc i8 %724 to i1
  br i1 %725, label %727, label %726

726:                                              ; preds = %723
  store i32 129, ptr %11, align 4
  br label %913

727:                                              ; preds = %723
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #6
  %728 = load ptr, ptr %9, align 8, !tbaa !5
  %729 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %728)
  store ptr %729, ptr %84, align 8, !tbaa !5
  br label %730

730:                                              ; preds = %907, %727
  %731 = load i8, ptr %83, align 1, !tbaa !9, !range !11, !noundef !12
  %732 = trunc i8 %731 to i1
  br i1 %732, label %734, label %733

733:                                              ; preds = %730
  store i32 132, ptr %11, align 4
  br label %908

734:                                              ; preds = %730
  %735 = load ptr, ptr %84, align 8, !tbaa !5
  %736 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %735)
  switch i32 %736, label %738 [
    i32 0, label %737
    i32 4, label %751
  ]

737:                                              ; preds = %734
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 200, ptr noundef @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

738:                                              ; preds = %734
  br label %739

739:                                              ; preds = %738
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %85, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %87) #6
  %740 = getelementptr inbounds %class.anon.369, ptr %87, i32 0, i32 0
  store ptr %85, ptr %740, align 8, !tbaa !5
  %741 = getelementptr inbounds %class.anon.369, ptr %87, i32 0, i32 1
  %742 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %742, ptr %741, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef nonnull align 8 dereferenceable(16) %87) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %86)
          to label %743 unwind label %745

743:                                              ; preds = %739
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %87) #6
  %744 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %744, align 16, !tbaa !5
  call void @__cxa_throw(ptr %744, ptr @_ZTIPKc, ptr null) #8
  unreachable

745:                                              ; preds = %739
  %746 = landingpad { ptr, i32 }
          cleanup
  %747 = extractvalue { ptr, i32 } %746, 0
  store ptr %747, ptr %20, align 8
  %748 = extractvalue { ptr, i32 } %746, 1
  store i32 %748, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %87) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #6
  br label %910

749:                                              ; No predecessors!
  br label %750

750:                                              ; preds = %749
  br label %906

751:                                              ; preds = %734
  call void @llvm.lifetime.start.p0(i64 1, ptr %88) #6
  store i8 1, ptr %88, align 1, !tbaa !9
  br label %752

752:                                              ; preds = %902, %751
  %753 = load i8, ptr %88, align 1, !tbaa !9, !range !11, !noundef !12
  %754 = trunc i8 %753 to i1
  br i1 %754, label %756, label %755

755:                                              ; preds = %752
  store i32 138, ptr %11, align 4
  br label %903

756:                                              ; preds = %752
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #6
  %757 = load ptr, ptr %84, align 8, !tbaa !5
  %758 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %757)
  store ptr %758, ptr %89, align 8, !tbaa !5
  br label %759

759:                                              ; preds = %897, %756
  %760 = load ptr, ptr %89, align 8, !tbaa !5
  %761 = load i8, ptr %88, align 1, !tbaa !9, !range !11, !noundef !12
  %762 = trunc i8 %761 to i1
  br i1 %762, label %764, label %763

763:                                              ; preds = %759
  store i32 141, ptr %11, align 4
  br label %898

764:                                              ; preds = %759
  br label %765

765:                                              ; preds = %764
  %766 = load ptr, ptr %89, align 8, !tbaa !5
  %767 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %766, i32 0, i32 1
  %768 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding7is_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %767)
  br i1 %768, label %779, label %769

769:                                              ; preds = %765
  %770 = load ptr, ptr %89, align 8, !tbaa !5
  %771 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %770, i32 0, i32 1
  %772 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding8is_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %771)
  br i1 %772, label %779, label %773

773:                                              ; preds = %769
  call void @llvm.lifetime.start.p0(i64 1, ptr %91) #6
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef nonnull align 1 dereferenceable(1) %91) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %90)
          to label %774 unwind label %775

774:                                              ; preds = %773
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #6
  br label %779

775:                                              ; preds = %773
  %776 = landingpad { ptr, i32 }
          cleanup
  %777 = extractvalue { ptr, i32 } %776, 0
  store ptr %777, ptr %20, align 8
  %778 = extractvalue { ptr, i32 } %776, 1
  store i32 %778, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #6
  br label %900

779:                                              ; preds = %774, %769, %765
  br label %780

780:                                              ; preds = %779
  br label %781

781:                                              ; preds = %780
  %782 = load ptr, ptr %89, align 8, !tbaa !5
  %783 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %782, i32 0, i32 1
  %784 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding7is_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %783)
  br i1 %784, label %785, label %850

785:                                              ; preds = %781
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #6
  %786 = load ptr, ptr %89, align 8, !tbaa !5
  %787 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %786, i32 0, i32 1
  %788 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %787)
  %789 = load ptr, ptr %788, align 8, !tbaa !5
  store ptr %789, ptr %92, align 8, !tbaa !5
  br label %790

790:                                              ; preds = %785
  %791 = load ptr, ptr %92, align 8, !tbaa !5
  %792 = getelementptr inbounds %"class.HIR::Enum", ptr %791, i32 0, i32 3
  %793 = call noundef zeroext i1 @_ZNK3HIR4Enum5Class7is_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %792)
  br i1 %793, label %802, label %794

794:                                              ; preds = %790
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #6
  %795 = getelementptr inbounds %class.anon.382, ptr %94, i32 0, i32 0
  %796 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %796, ptr %795, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %93, ptr noundef nonnull align 8 dereferenceable(8) %94) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %93)
          to label %797 unwind label %798

797:                                              ; preds = %794
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #6
  br label %802

798:                                              ; preds = %794
  %799 = landingpad { ptr, i32 }
          cleanup
  %800 = extractvalue { ptr, i32 } %799, 0
  store ptr %800, ptr %20, align 8
  %801 = extractvalue { ptr, i32 } %799, 1
  store i32 %801, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #6
  br label %849

802:                                              ; preds = %797, %790
  br label %803

803:                                              ; preds = %802
  br label %804

804:                                              ; preds = %803
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #6
  %805 = load ptr, ptr %92, align 8, !tbaa !5
  %806 = getelementptr inbounds %"class.HIR::Enum", ptr %805, i32 0, i32 3
  %807 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR4Enum5Class7as_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %806)
  store ptr %807, ptr %95, align 8, !tbaa !5
  br label %808

808:                                              ; preds = %804
  %809 = load i32, ptr %82, align 4, !tbaa !13
  %810 = zext i32 %809 to i64
  %811 = load ptr, ptr %95, align 8, !tbaa !5
  %812 = call noundef i64 @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %811) #6
  %813 = icmp ult i64 %810, %812
  br i1 %813, label %822, label %814

814:                                              ; preds = %808
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #6
  %815 = getelementptr inbounds %class.anon.383, ptr %97, i32 0, i32 0
  %816 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %816, ptr %815, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %96, ptr noundef nonnull align 8 dereferenceable(8) %97) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %96)
          to label %817 unwind label %818

817:                                              ; preds = %814
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #6
  br label %822

818:                                              ; preds = %814
  %819 = landingpad { ptr, i32 }
          cleanup
  %820 = extractvalue { ptr, i32 } %819, 0
  store ptr %820, ptr %20, align 8
  %821 = extractvalue { ptr, i32 } %819, 1
  store i32 %821, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #6
  br label %848

822:                                              ; preds = %817, %808
  br label %823

823:                                              ; preds = %822
  br label %824

824:                                              ; preds = %823
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #6
  %825 = load ptr, ptr %95, align 8, !tbaa !5
  %826 = load i32, ptr %82, align 4, !tbaa !13
  %827 = zext i32 %826 to i64
  %828 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %825, i64 noundef %827) #6
  store ptr %828, ptr %98, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #6
  %829 = load ptr, ptr %98, align 8, !tbaa !5
  %830 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %829, i32 0, i32 2
  store ptr %830, ptr %99, align 8, !tbaa !5
  %831 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %107, i32 0, i32 2
  %832 = load ptr, ptr %831, align 8, !tbaa !51
  %833 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %107, i32 0, i32 1
  %834 = load ptr, ptr %833, align 8, !tbaa !56
  %835 = load ptr, ptr %7, align 8, !tbaa !5
  %836 = load ptr, ptr %99, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr %100) #6
  %837 = load ptr, ptr %89, align 8, !tbaa !5
  %838 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %837, i32 0, i32 0
  %839 = getelementptr inbounds %"class.HIR::Path", ptr %838, i32 0, i32 0
  %840 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %839)
  %841 = getelementptr inbounds %"class.HIR::GenericPath", ptr %840, i32 0, i32 1
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %100, ptr noundef null, ptr noundef %841, ptr noundef null, ptr noundef null, ptr noundef null)
  %842 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK18StaticTraitResolve20monomorph_expand_optERK4SpanRN3HIR7TypeRefERKS4_RK13Monomorphiser(ptr noundef nonnull align 8 dereferenceable(424) %832, ptr noundef nonnull align 8 dereferenceable(8) %834, ptr noundef nonnull align 8 dereferenceable(8) %835, ptr noundef nonnull align 8 dereferenceable(8) %836, ptr noundef nonnull align 8 dereferenceable(96) %100)
          to label %843 unwind label %844

843:                                              ; preds = %824
  store ptr %842, ptr %5, align 8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %100) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %100) #6
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #6
  br label %898

844:                                              ; preds = %824
  %845 = landingpad { ptr, i32 }
          cleanup
  %846 = extractvalue { ptr, i32 } %845, 0
  store ptr %846, ptr %20, align 8
  %847 = extractvalue { ptr, i32 } %845, 1
  store i32 %847, ptr %21, align 4
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %100) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %100) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #6
  br label %848

848:                                              ; preds = %844, %818
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #6
  br label %849

849:                                              ; preds = %848, %798
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #6
  br label %900

850:                                              ; preds = %781
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #6
  %851 = load ptr, ptr %89, align 8, !tbaa !5
  %852 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %851, i32 0, i32 1
  %853 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding8as_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %852)
  %854 = load ptr, ptr %853, align 8, !tbaa !5
  store ptr %854, ptr %101, align 8, !tbaa !5
  br label %855

855:                                              ; preds = %850
  %856 = load i32, ptr %82, align 4, !tbaa !13
  %857 = zext i32 %856 to i64
  %858 = load ptr, ptr %101, align 8, !tbaa !5
  %859 = getelementptr inbounds %"class.HIR::Union", ptr %858, i32 0, i32 2
  %860 = call noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %859) #6
  %861 = icmp ult i64 %857, %860
  br i1 %861, label %868, label %862

862:                                              ; preds = %855
  call void @llvm.lifetime.start.p0(i64 1, ptr %103) #6
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef nonnull align 1 dereferenceable(1) %103) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %107, ptr noundef %102)
          to label %863 unwind label %864

863:                                              ; preds = %862
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #6
  br label %868

864:                                              ; preds = %862
  %865 = landingpad { ptr, i32 }
          cleanup
  %866 = extractvalue { ptr, i32 } %865, 0
  store ptr %866, ptr %20, align 8
  %867 = extractvalue { ptr, i32 } %865, 1
  store i32 %867, ptr %21, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #6
  br label %896

868:                                              ; preds = %863, %855
  br label %869

869:                                              ; preds = %868
  br label %870

870:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #6
  %871 = load ptr, ptr %101, align 8, !tbaa !5
  %872 = getelementptr inbounds %"class.HIR::Union", ptr %871, i32 0, i32 2
  %873 = load i32, ptr %82, align 4, !tbaa !13
  %874 = zext i32 %873 to i64
  %875 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %872, i64 noundef %874) #6
  store ptr %875, ptr %104, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #6
  %876 = load ptr, ptr %104, align 8, !tbaa !5
  %877 = getelementptr inbounds %"struct.std::pair.361", ptr %876, i32 0, i32 1
  %878 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %877, i32 0, i32 1
  store ptr %878, ptr %105, align 8, !tbaa !5
  %879 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %107, i32 0, i32 2
  %880 = load ptr, ptr %879, align 8, !tbaa !51
  %881 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %107, i32 0, i32 1
  %882 = load ptr, ptr %881, align 8, !tbaa !56
  %883 = load ptr, ptr %7, align 8, !tbaa !5
  %884 = load ptr, ptr %105, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr %106) #6
  %885 = load ptr, ptr %89, align 8, !tbaa !5
  %886 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %885, i32 0, i32 0
  %887 = getelementptr inbounds %"class.HIR::Path", ptr %886, i32 0, i32 0
  %888 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %887)
  %889 = getelementptr inbounds %"class.HIR::GenericPath", ptr %888, i32 0, i32 1
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %106, ptr noundef null, ptr noundef %889, ptr noundef null, ptr noundef null, ptr noundef null)
  %890 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK18StaticTraitResolve20monomorph_expand_optERK4SpanRN3HIR7TypeRefERKS4_RK13Monomorphiser(ptr noundef nonnull align 8 dereferenceable(424) %880, ptr noundef nonnull align 8 dereferenceable(8) %882, ptr noundef nonnull align 8 dereferenceable(8) %883, ptr noundef nonnull align 8 dereferenceable(8) %884, ptr noundef nonnull align 8 dereferenceable(96) %106)
          to label %891 unwind label %892

891:                                              ; preds = %870
  store ptr %890, ptr %5, align 8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %106) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %106) #6
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #6
  br label %898

892:                                              ; preds = %870
  %893 = landingpad { ptr, i32 }
          cleanup
  %894 = extractvalue { ptr, i32 } %893, 0
  store ptr %894, ptr %20, align 8
  %895 = extractvalue { ptr, i32 } %893, 1
  store i32 %895, ptr %21, align 4
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %106) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %106) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #6
  br label %896

896:                                              ; preds = %892, %864
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #6
  br label %900

897:                                              ; No predecessors!
  store i8 0, ptr %88, align 1, !tbaa !9
  br label %759, !llvm.loop !57

898:                                              ; preds = %891, %843, %763
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #6
  %899 = load i32, ptr %11, align 4
  switch i32 %899, label %903 [
    i32 141, label %901
  ]

900:                                              ; preds = %896, %849, %775
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #6
  br label %910

901:                                              ; preds = %898
  br label %902

902:                                              ; preds = %901
  store i8 0, ptr %88, align 1, !tbaa !9
  br label %752, !llvm.loop !58

903:                                              ; preds = %898, %755
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #6
  %904 = load i32, ptr %11, align 4
  switch i32 %904, label %908 [
    i32 138, label %905
  ]

905:                                              ; preds = %903
  br label %906

906:                                              ; preds = %905, %750
  br label %907

907:                                              ; preds = %906
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %730, !llvm.loop !59

908:                                              ; preds = %903, %733
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #6
  %909 = load i32, ptr %11, align 4
  switch i32 %909, label %913 [
    i32 132, label %911
  ]

910:                                              ; preds = %900, %745
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #6
  br label %928

911:                                              ; preds = %908
  br label %912

912:                                              ; preds = %911
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %723, !llvm.loop !60

913:                                              ; preds = %908, %726
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #6
  %914 = load i32, ptr %11, align 4
  switch i32 %914, label %917 [
    i32 129, label %915
  ]

915:                                              ; preds = %913
  br label %916

916:                                              ; preds = %915
  store i8 0, ptr %81, align 1, !tbaa !9
  br label %718, !llvm.loop !61

917:                                              ; preds = %913, %721
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #6
  %918 = load i32, ptr %11, align 4
  switch i32 %918, label %921 [
    i32 126, label %919
  ]

919:                                              ; preds = %917
  br label %920

920:                                              ; preds = %919
  store i8 0, ptr %81, align 1, !tbaa !9
  br label %711, !llvm.loop !62

921:                                              ; preds = %917, %714
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #6
  %922 = load i32, ptr %11, align 4
  switch i32 %922, label %926 [
    i32 123, label %923
  ]

923:                                              ; preds = %921
  br label %924

924:                                              ; preds = %923, %709, %603, %451, %118
  br label %925

925:                                              ; preds = %924
  store i8 0, ptr %10, align 1, !tbaa !9
  br label %114, !llvm.loop !63

926:                                              ; preds = %921, %707, %601, %449, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  %927 = load i32, ptr %11, align 4
  switch i32 %927, label %931 [
    i32 5, label %929
  ]

928:                                              ; preds = %910, %639, %590, %438
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #6
  br label %937

929:                                              ; preds = %926
  br label %930

930:                                              ; preds = %929
  store i8 0, ptr %10, align 1, !tbaa !9
  br label %108, !llvm.loop !64

931:                                              ; preds = %926, %111
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #6
  %932 = load i32, ptr %11, align 4
  switch i32 %932, label %942 [
    i32 2, label %933
    i32 1, label %935
  ]

933:                                              ; preds = %931
  %934 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %934, align 16, !tbaa !5
  call void @__cxa_throw(ptr %934, ptr @_ZTIPKc, ptr null) #8
  unreachable

935:                                              ; preds = %931
  %936 = load ptr, ptr %5, align 8
  ret ptr %936

937:                                              ; preds = %928
  %938 = load ptr, ptr %20, align 8
  %939 = load i32, ptr %21, align 4
  %940 = insertvalue { ptr, i32 } poison, ptr %938, 0
  %941 = insertvalue { ptr, i32 } %940, i32 %939, 1
  resume { ptr, i32 } %941

942:                                              ; preds = %931
  unreachable
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3MIR6LValue7Wrapper8as_FieldEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK3$_4clIS2_EERKDaRKT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK4$_16clES9_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef signext i8 @_ZNK3MIR6LValue7Wrapper8as_DerefEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3MIR6LValue7Wrapper8as_IndexEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3MIR6LValue7Wrapper11as_DowncastEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = !{!23, !6, i64 0}
!23 = !{!"_ZTSZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_E3$_4", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!25, !6, i64 0}
!25 = !{!"_ZTSZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_E4$_16", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = !{!7, !7, i64 0}
!33 = distinct !{!33, !16}
!34 = distinct !{!34, !16}
!35 = distinct !{!35, !16}
!36 = distinct !{!36, !16}
!37 = distinct !{!37, !16}
!38 = distinct !{!38, !16}
!39 = distinct !{!39, !16}
!40 = distinct !{!40, !16}
!41 = distinct !{!41, !16}
!42 = distinct !{!42, !16}
!43 = distinct !{!43, !16}
!44 = distinct !{!44, !16}
!45 = distinct !{!45, !16}
!46 = distinct !{!46, !16}
!47 = distinct !{!47, !16}
!48 = distinct !{!48, !16}
!49 = distinct !{!49, !16}
!50 = distinct !{!50, !16}
!51 = !{!52, !6, i64 16}
!52 = !{!"_ZTSN3MIR11TypeResolveE", !14, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !53, i64 32, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !14, i64 112, !14, i64 116}
!53 = !{!"_ZTS9FmtLambda", !54, i64 0}
!54 = !{!"_ZTSSt8functionIFvRSoEE", !55, i64 0, !6, i64 24}
!55 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!56 = !{!52, !6, i64 8}
!57 = distinct !{!57, !16}
!58 = distinct !{!58, !16}
!59 = distinct !{!59, !16}
!60 = distinct !{!60, !16}
!61 = distinct !{!61, !16}
!62 = distinct !{!62, !16}
!63 = distinct !{!63, !16}
!64 = distinct !{!64, !16}


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

%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.337 = type { ptr, ptr }
%class.anon.338 = type { ptr, ptr }
%class.anon.354 = type { ptr, ptr, ptr }
%class.anon.355 = type { ptr, ptr }
%class.anon.356 = type { ptr }
%class.anon.360 = type { ptr }
%class.anon.363 = type { ptr, ptr, ptr }
%class.anon.364 = type { i8 }
%class.anon.365 = type { ptr, ptr }
%class.anon.366 = type { ptr, ptr }
%class.anon.367 = type { ptr, ptr }
%class.anon.368 = type { ptr, ptr }
%class.anon.369 = type { ptr, ptr }
%class.anon.370 = type { i8 }
%class.anon.382 = type { ptr }
%class.anon.383 = type { ptr }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.236" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.236" = type { %"struct.std::_Vector_base.237" }
%"struct.std::_Vector_base.237" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.384 = type { i8 }

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
.lr.ph:
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %"class.std::function", align 8
  %7 = alloca %class.anon.337, align 8
  %8 = alloca %"class.std::function", align 8
  %9 = alloca %class.anon.338, align 8
  %10 = alloca %class.anon.354, align 8
  %11 = alloca ptr, align 8
  %12 = alloca %"class.std::function", align 8
  %13 = alloca %class.anon.355, align 8
  %14 = alloca %"class.std::function", align 8
  %15 = alloca %class.anon.356, align 8
  %16 = alloca %"class.std::function", align 8
  %17 = alloca %class.anon.360, align 8
  %18 = alloca %class.anon.363, align 8
  %19 = alloca %"class.std::function", align 8
  %20 = alloca %class.anon.364, align 1
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::function", align 8
  %23 = alloca %class.anon.365, align 8
  %24 = alloca ptr, align 8
  %25 = alloca %"class.std::function", align 8
  %26 = alloca %class.anon.366, align 8
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::function", align 8
  %29 = alloca %class.anon.367, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"class.std::function", align 8
  %32 = alloca %class.anon.368, align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"class.std::function", align 8
  %35 = alloca %class.anon.369, align 8
  %36 = alloca %"class.std::function", align 8
  %37 = alloca %class.anon.370, align 1
  %38 = alloca %"class.std::function", align 8
  %39 = alloca %class.anon.382, align 8
  %40 = alloca %"class.std::function", align 8
  %41 = alloca %class.anon.383, align 8
  %42 = alloca %struct.MonomorphStatePtr, align 8
  %43 = alloca %"class.std::function", align 8
  %44 = alloca %class.anon.384, align 1
  %45 = alloca %struct.MonomorphStatePtr, align 8
  %46 = getelementptr inbounds i8, ptr %10, i64 8
  %47 = getelementptr inbounds i8, ptr %10, i64 16
  %48 = tail call noundef i32 @_ZNK3MIR6LValue7Wrapper3tagEv(ptr noundef nonnull align 4 dereferenceable(4) %2)
  switch i32 %48, label %.loopexit386 [
    i32 4, label %.split698
    i32 1, label %.preheader384
    i32 0, label %.split700
    i32 3, label %.split702
    i32 2, label %.split704
  ]

.preheader384:                                    ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  %49 = tail call noundef i32 @_ZNK3MIR6LValue7Wrapper8as_FieldEv(ptr noundef nonnull align 4 dereferenceable(4) %2)
  store i32 %49, ptr %4, align 4, !tbaa !5
  %50 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %51 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %50)
  switch i32 %51, label %.split493 [
    i32 0, label %.split495
    i32 8, label %.split497
    i32 9, label %.split500
    i32 10, label %.split503
    i32 4, label %.preheader
  ]

.split698:                                        ; preds = %.lr.ph
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 112, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

.preheader:                                       ; preds = %.preheader384
  %52 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %50)
  %53 = getelementptr inbounds i8, ptr %52, i64 88
  %54 = tail call noundef ptr @_ZNK3HIR15TypePathBinding10opt_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %53)
  %.not330 = icmp eq ptr %54, null
  br i1 %.not330, label %.split, label %73

.split495:                                        ; preds = %.preheader384
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 114, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

.split493:                                        ; preds = %.preheader384
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #6
  store ptr %5, ptr %7, align 8, !tbaa !9
  %55 = getelementptr inbounds i8, ptr %7, i64 8
  store ptr %3, ptr %55, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(16) %7) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %6)
          to label %56 unwind label %58

56:                                               ; preds = %.split493
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #6
  %57 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %57, align 16, !tbaa !9
  call void @__cxa_throw(ptr nonnull %57, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

58:                                               ; preds = %.split493
  %59 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6
  br label %129

.split497:                                        ; preds = %.preheader384
  %60 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %50)
  br label %.thread349

.split500:                                        ; preds = %.preheader384
  %61 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %50)
  br label %.thread349

.split503:                                        ; preds = %.preheader384
  %62 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %50)
  %63 = zext i32 %49 to i64
  %64 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #6
  %65 = icmp ugt i64 %64, %63
  br i1 %65, label %71, label %66

66:                                               ; preds = %.split503
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #6
  store ptr %4, ptr %9, align 8, !tbaa !9
  %67 = getelementptr inbounds i8, ptr %9, i64 8
  store ptr %62, ptr %67, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(16) %9) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %8)
          to label %68 unwind label %69

68:                                               ; preds = %66
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  %.pre = load i32, ptr %4, align 4, !tbaa !5
  %.pre783 = zext i32 %.pre to i64
  br label %71

69:                                               ; preds = %66
  %70 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  br label %129

71:                                               ; preds = %68, %.split503
  %.pre-phi = phi i64 [ %.pre783, %68 ], [ %63, %.split503 ]
  %72 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef %.pre-phi) #6
  br label %.thread349

73:                                               ; preds = %.preheader
  %74 = load ptr, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #6
  store ptr %0, ptr %10, align 8, !tbaa !11
  store ptr %1, ptr %46, align 8, !tbaa !9
  store ptr %52, ptr %47, align 8, !tbaa !9
  %75 = getelementptr inbounds i8, ptr %74, i64 104
  %76 = tail call noundef i32 @_ZNK3HIR6Struct4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(32) %75)
  switch i32 %76, label %..loopexit_crit_edge [
    i32 0, label %.split412
    i32 1, label %.split414
    i32 2, label %.split417
    i32 3, label %.split421
  ]

.split412:                                        ; preds = %73
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 148, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

.split414:                                        ; preds = %73
  %77 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR6Struct4Data7as_UnitEv(ptr noundef nonnull align 8 dereferenceable(32) %75)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #6
  store ptr %11, ptr %13, align 8, !tbaa !9
  %78 = getelementptr inbounds i8, ptr %13, i64 8
  store ptr %3, ptr %78, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(16) %13) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %12)
          to label %79 unwind label %81

79:                                               ; preds = %.split414
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  %80 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %80, align 16, !tbaa !9
  call void @__cxa_throw(ptr nonnull %80, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

81:                                               ; preds = %.split414
  %82 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %105

.split417:                                        ; preds = %73
  %83 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %75)
  %84 = zext i32 %49 to i64
  %85 = tail call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #6
  %86 = icmp ugt i64 %85, %84
  br i1 %86, label %91, label %87

87:                                               ; preds = %.split417
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  store ptr %52, ptr %15, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %14)
          to label %88 unwind label %89

88:                                               ; preds = %87
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  br label %91

89:                                               ; preds = %87
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  br label %105

91:                                               ; preds = %88, %.split417
  %92 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %84) #6
  %93 = getelementptr inbounds i8, ptr %92, i64 16
  br label %.thread342

.split421:                                        ; preds = %73
  %94 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR6Struct4Data8as_NamedEv(ptr noundef nonnull align 8 dereferenceable(32) %75)
  %95 = zext i32 %49 to i64
  %96 = tail call noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %94) #6
  %97 = icmp ugt i64 %96, %95
  br i1 %97, label %102, label %98

98:                                               ; preds = %.split421
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  store ptr %52, ptr %17, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %16)
          to label %99 unwind label %100

99:                                               ; preds = %98
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  br label %102

100:                                              ; preds = %98
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  br label %105

102:                                              ; preds = %99, %.split421
  %103 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %94, i64 noundef %95) #6
  %104 = getelementptr inbounds i8, ptr %103, i64 24
  br label %.thread342

105:                                              ; preds = %100, %89, %81
  %.pn334 = phi { ptr, i32 } [ %101, %100 ], [ %90, %89 ], [ %82, %81 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  br label %129

.split:                                           ; preds = %.preheader
  %106 = tail call noundef ptr @_ZNK3HIR15TypePathBinding9opt_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %53)
  %.not331 = icmp eq ptr %106, null
  br i1 %.not331, label %122, label %107

107:                                              ; preds = %.split
  %108 = load ptr, ptr %106, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #6
  store ptr %0, ptr %18, align 8, !tbaa !13
  %109 = getelementptr inbounds i8, ptr %18, i64 8
  store ptr %1, ptr %109, align 8, !tbaa !9
  %110 = getelementptr inbounds i8, ptr %18, i64 16
  store ptr %52, ptr %110, align 8, !tbaa !9
  %111 = zext i32 %49 to i64
  %112 = getelementptr inbounds i8, ptr %108, i64 104
  %113 = tail call noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %112) #6
  %114 = icmp ugt i64 %113, %111
  br i1 %114, label %.thread, label %115

115:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #6
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %19)
          to label %116 unwind label %117

116:                                              ; preds = %115
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #6
  br label %.thread

117:                                              ; preds = %115
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #6
  br label %129

.thread:                                          ; preds = %107, %116
  %119 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %112, i64 noundef %111)
  %120 = getelementptr inbounds i8, ptr %119, i64 24
  %121 = call noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK4$_16clES9_"(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(8) %120)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #6
  br label %.thread349

122:                                              ; preds = %.split
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #6
  store ptr %21, ptr %23, align 8, !tbaa !9
  %123 = getelementptr inbounds i8, ptr %23, i64 8
  store ptr %3, ptr %123, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(16) %23) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %22)
          to label %124 unwind label %126

124:                                              ; preds = %122
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  %125 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %125, align 16, !tbaa !9
  call void @__cxa_throw(ptr nonnull %125, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

126:                                              ; preds = %122
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  br label %129

.thread342:                                       ; preds = %102, %91
  %.sink = phi ptr [ %104, %102 ], [ %93, %91 ]
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK3$_4clIS2_EERKDaRKT_"(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(8) %.sink)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  br label %.thread349

..loopexit_crit_edge:                             ; preds = %73
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  br label %.loopexit386

129:                                              ; preds = %105, %126, %117, %69, %58
  %.pn337 = phi { ptr, i32 } [ %59, %58 ], [ %70, %69 ], [ %.pn334, %105 ], [ %118, %117 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  br label %246

.thread349:                                       ; preds = %.thread342, %.thread, %71, %.split500, %.split497
  %.23.ph = phi ptr [ %60, %.split497 ], [ %61, %.split500 ], [ %72, %71 ], [ %128, %.thread342 ], [ %121, %.thread ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  br label %248

.split700:                                        ; preds = %.lr.ph
  %130 = tail call noundef signext i8 @_ZNK3MIR6LValue7Wrapper8as_DerefEv(ptr noundef nonnull align 4 dereferenceable(4) %2)
  %131 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %132 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %131)
  switch i32 %132, label %134 [
    i32 0, label %133
    i32 4, label %140
    i32 12, label %149
    i32 11, label %152
  ]

133:                                              ; preds = %.split700
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 167, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

134:                                              ; preds = %.split700
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #6
  store ptr %24, ptr %26, align 8, !tbaa !9
  %135 = getelementptr inbounds i8, ptr %26, i64 8
  store ptr %3, ptr %135, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(16) %26) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %25)
          to label %136 unwind label %138

136:                                              ; preds = %134
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #6
  %137 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %137, align 16, !tbaa !9
  call void @__cxa_throw(ptr nonnull %137, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

138:                                              ; preds = %134
  %139 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  br label %246

140:                                              ; preds = %.split700
  %141 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %131)
  %142 = tail call noundef ptr @_ZNK3MIR11TypeResolve17is_type_owned_boxERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %.not = icmp eq ptr %142, null
  br i1 %.not, label %143, label %248

143:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #6
  store ptr %27, ptr %29, align 8, !tbaa !9
  %144 = getelementptr inbounds i8, ptr %29, i64 8
  store ptr %3, ptr %144, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(16) %29) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %28)
          to label %145 unwind label %147

145:                                              ; preds = %143
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #6
  %146 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %146, align 16, !tbaa !9
  call void @__cxa_throw(ptr nonnull %146, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

147:                                              ; preds = %143
  %148 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  br label %246

149:                                              ; preds = %.split700
  %150 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %131)
  %151 = getelementptr inbounds i8, ptr %150, i64 8
  br label %248

152:                                              ; preds = %.split700
  %153 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %131)
  %154 = getelementptr inbounds i8, ptr %153, i64 8
  br label %248

.split702:                                        ; preds = %.lr.ph
  %155 = tail call noundef i32 @_ZNK3MIR6LValue7Wrapper8as_IndexEv(ptr noundef nonnull align 4 dereferenceable(4) %2)
  %156 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %157 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %156)
  switch i32 %157, label %159 [
    i32 0, label %158
    i32 9, label %165
    i32 8, label %167
  ]

158:                                              ; preds = %.split702
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 188, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

159:                                              ; preds = %.split702
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #6
  store ptr %30, ptr %32, align 8, !tbaa !9
  %160 = getelementptr inbounds i8, ptr %32, i64 8
  store ptr %3, ptr %160, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(16) %32) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %31)
          to label %161 unwind label %163

161:                                              ; preds = %159
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  %162 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %162, align 16, !tbaa !9
  call void @__cxa_throw(ptr nonnull %162, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

163:                                              ; preds = %159
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  br label %246

165:                                              ; preds = %.split702
  %166 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %156)
  br label %248

167:                                              ; preds = %.split702
  %168 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %156)
  br label %248

.split704:                                        ; preds = %.lr.ph
  %169 = tail call noundef i32 @_ZNK3MIR6LValue7Wrapper11as_DowncastEv(ptr noundef nonnull align 4 dereferenceable(4) %2)
  %170 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %171 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %170)
  switch i32 %171, label %173 [
    i32 0, label %172
    i32 4, label %179
  ]

172:                                              ; preds = %.split704
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 200, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_) #7
  unreachable

173:                                              ; preds = %.split704
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  store ptr @__FUNCTION__._ZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #6
  store ptr %33, ptr %35, align 8, !tbaa !9
  %174 = getelementptr inbounds i8, ptr %35, i64 8
  store ptr %3, ptr %174, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(16) %35) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %34)
          to label %175 unwind label %177

175:                                              ; preds = %173
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #6
  %176 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %176, align 16, !tbaa !9
  call void @__cxa_throw(ptr nonnull %176, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

177:                                              ; preds = %173
  %178 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  br label %246

179:                                              ; preds = %.split704
  %180 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %170)
  %181 = getelementptr inbounds i8, ptr %180, i64 88
  %182 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding7is_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %181)
  br i1 %182, label %189, label %183

183:                                              ; preds = %179
  %184 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding8is_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %181)
  br i1 %184, label %189, label %185

185:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %37) #6
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(1) %37) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %36)
          to label %186 unwind label %187

186:                                              ; preds = %185
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #6
  br label %189

187:                                              ; preds = %185
  %188 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #6
  br label %246

189:                                              ; preds = %186, %183, %179
  %190 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding7is_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %181)
  br i1 %190, label %191, label %222

191:                                              ; preds = %189
  %192 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %181)
  %193 = load ptr, ptr %192, align 8, !tbaa !9
  %194 = getelementptr inbounds i8, ptr %193, i64 104
  %195 = call noundef zeroext i1 @_ZNK3HIR4Enum5Class7is_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %194)
  br i1 %195, label %200, label %196

196:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #6
  store ptr %3, ptr %39, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(8) %39) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %38)
          to label %197 unwind label %198

197:                                              ; preds = %196
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  br label %200

198:                                              ; preds = %196
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  br label %246

200:                                              ; preds = %197, %191
  %201 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR4Enum5Class7as_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %194)
  %202 = zext i32 %169 to i64
  %203 = call noundef i64 @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %201) #6
  %204 = icmp ugt i64 %203, %202
  br i1 %204, label %209, label %205

205:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #6
  store ptr %3, ptr %41, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %40)
          to label %206 unwind label %207

206:                                              ; preds = %205
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #6
  br label %209

207:                                              ; preds = %205
  %208 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #6
  br label %246

209:                                              ; preds = %206, %200
  %210 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %201, i64 noundef %202) #6
  %211 = getelementptr inbounds i8, ptr %210, i64 16
  %212 = getelementptr inbounds i8, ptr %0, i64 16
  %213 = load ptr, ptr %212, align 8, !tbaa !15
  %214 = getelementptr inbounds i8, ptr %0, i64 8
  %215 = load ptr, ptr %214, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %42) #6
  %216 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %180)
  %217 = getelementptr inbounds i8, ptr %216, i64 8
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %42, ptr noundef null, ptr noundef nonnull %217, ptr noundef null, ptr noundef null, ptr noundef null)
  %218 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK18StaticTraitResolve20monomorph_expand_optERK4SpanRN3HIR7TypeRefERKS4_RK13Monomorphiser(ptr noundef nonnull align 8 dereferenceable(424) %213, ptr noundef nonnull align 8 dereferenceable(8) %215, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %211, ptr noundef nonnull align 8 dereferenceable(96) %42)
          to label %219 unwind label %220

219:                                              ; preds = %209
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %42) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %42) #6
  br label %248

220:                                              ; preds = %209
  %221 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %42) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %42) #6
  br label %246

222:                                              ; preds = %189
  %223 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding8as_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %181)
  %224 = load ptr, ptr %223, align 8, !tbaa !9
  %225 = zext i32 %169 to i64
  %226 = getelementptr inbounds i8, ptr %224, i64 104
  %227 = call noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %226) #6
  %228 = icmp ugt i64 %227, %225
  br i1 %228, label %233, label %229

229:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %44) #6
  call void @"_ZNSt8functionIFvRSoEEC2IZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS4_6LValue7WrapperERKS7_E4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %43)
          to label %230 unwind label %231

230:                                              ; preds = %229
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %44) #6
  br label %233

231:                                              ; preds = %229
  %232 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %44) #6
  br label %246

233:                                              ; preds = %230, %222
  %234 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %226, i64 noundef %225) #6
  %235 = getelementptr inbounds i8, ptr %234, i64 24
  %236 = getelementptr inbounds i8, ptr %0, i64 16
  %237 = load ptr, ptr %236, align 8, !tbaa !15
  %238 = getelementptr inbounds i8, ptr %0, i64 8
  %239 = load ptr, ptr %238, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %45) #6
  %240 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %180)
  %241 = getelementptr inbounds i8, ptr %240, i64 8
  call void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %45, ptr noundef null, ptr noundef nonnull %241, ptr noundef null, ptr noundef null, ptr noundef null)
  %242 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK18StaticTraitResolve20monomorph_expand_optERK4SpanRN3HIR7TypeRefERKS4_RK13Monomorphiser(ptr noundef nonnull align 8 dereferenceable(424) %237, ptr noundef nonnull align 8 dereferenceable(8) %239, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %235, ptr noundef nonnull align 8 dereferenceable(96) %45)
          to label %243 unwind label %244

243:                                              ; preds = %233
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %45) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %45) #6
  br label %248

244:                                              ; preds = %233
  %245 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %45) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %45) #6
  br label %246

246:                                              ; preds = %177, %231, %244, %198, %220, %207, %187, %138, %147, %163, %129
  %.pn326.pn = phi { ptr, i32 } [ %164, %163 ], [ %.pn337, %129 ], [ %139, %138 ], [ %148, %147 ], [ %178, %177 ], [ %188, %187 ], [ %199, %198 ], [ %221, %220 ], [ %208, %207 ], [ %245, %244 ], [ %232, %231 ]
  resume { ptr, i32 } %.pn326.pn

.loopexit386:                                     ; preds = %.lr.ph, %..loopexit_crit_edge
  %247 = tail call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.8, ptr %247, align 16, !tbaa !9
  tail call void @__cxa_throw(ptr nonnull %247, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

248:                                              ; preds = %243, %219, %167, %165, %140, %152, %149, %.thread349
  %.73.ph = phi ptr [ %242, %243 ], [ %218, %219 ], [ %166, %165 ], [ %168, %167 ], [ %142, %140 ], [ %151, %149 ], [ %154, %152 ], [ %.23.ph, %.thread349 ]
  ret ptr %.73.ph
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3MIR6LValue7Wrapper8as_FieldEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK3$_4clIS2_EERKDaRKT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_ENK4$_16clES9_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef signext i8 @_ZNK3MIR6LValue7Wrapper8as_DerefEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3MIR6LValue7Wrapper8as_IndexEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3MIR6LValue7Wrapper11as_DowncastEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTSZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_E3$_4", !10, i64 0, !10, i64 8, !10, i64 16}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTSZNK3MIR11TypeResolve18get_unwrapped_typeERN3HIR7TypeRefERKNS_6LValue7WrapperERKS2_E4$_16", !10, i64 0, !10, i64 8, !10, i64 16}
!15 = !{!16, !10, i64 16}
!16 = !{!"_ZTSN3MIR11TypeResolveE", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !17, i64 32, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !6, i64 112, !6, i64 116}
!17 = !{!"_ZTS9FmtLambda", !18, i64 0}
!18 = !{!"_ZTSSt8functionIFvRSoEE", !19, i64 0, !10, i64 24}
!19 = !{!"_ZTSSt14_Function_base", !7, i64 0, !10, i64 16}
!20 = !{!16, !10, i64 8}


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