; LLVM IR from thepowersgang/mrustc :: src/hir/type.ll (ZNK3HIR7TypeRefeqERKS0_)

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

%"class.HIR::TypeRef" = type { ptr }
%"struct.HIR::TypeData::Data_Infer" = type { i32, i32 }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.25" }
%"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.25" }
%"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.22, %class.ThinVector.23, %class.ThinVector.24 }
%class.ThinVector.22 = type { ptr }
%class.ThinVector.23 = type { ptr }
%class.ThinVector.24 = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.std::unique_ptr.25" = type { %"struct.std::__uniq_ptr_data.26" }
%"struct.std::__uniq_ptr_data.26" = type { %"class.std::__uniq_ptr_impl.27" }
%"class.std::__uniq_ptr_impl.27" = type { %"class.std::tuple.28" }
%"class.std::tuple.28" = type { %"struct.std::_Tuple_impl.29" }
%"struct.std::_Tuple_impl.29" = type { %"struct.std::_Head_base.32" }
%"struct.std::_Head_base.32" = type { ptr }
%"struct.HIR::GenericRef" = type <{ %class.RcString, i32, [4 x i8] }>
%"struct.HIR::TypeData_TraitObject" = type <{ %"class.HIR::TraitPath", %"class.std::vector.109", %"struct.HIR::LifetimeRef", [4 x i8] }>
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr.25", %"class.HIR::GenericPath", %"class.std::map.98", %"class.std::map.104", ptr }
%"class.std::map.98" = type { %"class.std::_Rb_tree.99" }
%"class.std::_Rb_tree.99" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.104" = type { %"class.std::_Rb_tree.105" }
%"class.std::_Rb_tree.105" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector.109" = type { %"struct.std::_Vector_base.110" }
%"struct.std::_Vector_base.110" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.114", %"class.std::vector.119", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.114" = type { %"struct.std::_Vector_base.115" }
%"struct.std::_Vector_base.115" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.119" = type { %"struct.std::_Vector_base.120" }
%"struct.std::_Vector_base.120" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"class.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr", [8 x i8] }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"class.HIR::TypeData_NamedFunction_Ty" = type { i32, %"union.HIR::TypeData_NamedFunction_Ty::DataUnion" }
%"union.HIR::TypeData_NamedFunction_Ty::DataUnion" = type { %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" }
%"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" = type { ptr, i64 }
%"struct.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.17" }
%"class.HIR::GenericParams" = type { %"class.std::vector", %"class.std::vector.2", %"class.std::vector.7", %"class.std::vector.12" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.2" = type { %"struct.std::_Vector_base.3" }
%"struct.std::_Vector_base.3" = 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.7" = type { %"struct.std::_Vector_base.8" }
%"struct.std::_Vector_base.8" = 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.12" = type { %"struct.std::_Vector_base.13" }
%"struct.std::_Vector_base.13" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.17" = type { %"struct.std::_Vector_base.18" }
%"struct.std::_Vector_base.18" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData::Data_Closure" = type { ptr }
%"struct.HIR::TypeData::Data_Generator" = type { ptr }

@.str.18 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK3HIR7TypeRefeqERKS0_ = external hidden unnamed_addr constant [60 x i8], align 1

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

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184)) #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 dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(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 @_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(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184)) #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1) #4 align 2 {
  %3 = alloca i1, align 1
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i8, align 1
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i8, align 1
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i8, align 1
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i8, align 1
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i8, align 1
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i8, align 1
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i8, align 1
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca i8, align 1
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i8, align 1
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca i8, align 1
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca i32, align 4
  %55 = alloca i8, align 1
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i8, align 1
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %61 = load ptr, ptr %4, align 8
  %62 = getelementptr inbounds %"class.HIR::TypeRef", ptr %61, i32 0, i32 0
  %63 = load ptr, ptr %62, align 8, !tbaa !9
  %64 = load ptr, ptr %5, align 8, !tbaa !5
  %65 = getelementptr inbounds %"class.HIR::TypeRef", ptr %64, i32 0, i32 0
  %66 = load ptr, ptr %65, align 8, !tbaa !9
  %67 = icmp eq ptr %63, %66
  br i1 %67, label %68, label %69

68:                                               ; preds = %2
  store i1 true, ptr %3, align 1
  br label %749

69:                                               ; preds = %2
  %70 = getelementptr inbounds %"class.HIR::TypeRef", ptr %61, i32 0, i32 0
  %71 = load ptr, ptr %70, align 8, !tbaa !9
  %72 = icmp ne ptr %71, null
  br i1 %72, label %73, label %78

73:                                               ; preds = %69
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = getelementptr inbounds %"class.HIR::TypeRef", ptr %74, i32 0, i32 0
  %76 = load ptr, ptr %75, align 8, !tbaa !9
  %77 = icmp ne ptr %76, null
  br i1 %77, label %79, label %78

78:                                               ; preds = %73, %69
  store i1 false, ptr %3, align 1
  br label %749

79:                                               ; preds = %73
  %80 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %61)
  %81 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %80)
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %82)
  %84 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %83)
  %85 = icmp ne i32 %81, %84
  br i1 %85, label %86, label %87

86:                                               ; preds = %79
  store i1 false, ptr %3, align 1
  br label %749

87:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #7
  store i8 1, ptr %6, align 1, !tbaa !11
  br label %88

88:                                               ; preds = %744, %87
  %89 = load i8, ptr %6, align 1, !tbaa !11, !range !13, !noundef !14
  %90 = trunc i8 %89 to i1
  br i1 %90, label %92, label %91

91:                                               ; preds = %88
  store i32 2, ptr %7, align 4
  br label %745

92:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %93 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %61)
  store ptr %93, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %94 = load ptr, ptr %5, align 8, !tbaa !5
  %95 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %94)
  store ptr %95, ptr %9, align 8, !tbaa !5
  br label %96

96:                                               ; preds = %740, %92
  %97 = load i8, ptr %6, align 1, !tbaa !11, !range !13, !noundef !14
  %98 = trunc i8 %97 to i1
  br i1 %98, label %100, label %99

99:                                               ; preds = %96
  store i32 5, ptr %7, align 4
  br label %741

100:                                              ; preds = %96
  %101 = load ptr, ptr %8, align 8, !tbaa !5
  %102 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %101)
  switch i32 %102, label %739 [
    i32 0, label %103
    i32 1, label %104
    i32 2, label %136
    i32 3, label %161
    i32 4, label %191
    i32 5, label %221
    i32 6, label %253
    i32 7, label %322
    i32 8, label %352
    i32 9, label %391
    i32 10, label %421
    i32 11, label %478
    i32 12, label %517
    i32 13, label %556
    i32 14, label %586
    i32 15, label %673
    i32 16, label %707
  ]

103:                                              ; preds = %100
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 394, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRefeqERKS0_) #8
  unreachable

104:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #7
  store i8 1, ptr %10, align 1, !tbaa !11
  br label %105

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

108:                                              ; preds = %105
  store i32 9, ptr %7, align 4
  br label %133

109:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %110 = load ptr, ptr %8, align 8, !tbaa !5
  %111 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %110)
  store ptr %111, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %112 = load ptr, ptr %9, align 8, !tbaa !5
  %113 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %112)
  store ptr %113, ptr %12, align 8, !tbaa !5
  br label %114

114:                                              ; preds = %128, %109
  %115 = load ptr, ptr %11, align 8, !tbaa !5
  %116 = load ptr, ptr %12, align 8, !tbaa !5
  %117 = load i8, ptr %10, align 1, !tbaa !11, !range !13, !noundef !14
  %118 = trunc i8 %117 to i1
  br i1 %118, label %120, label %119

119:                                              ; preds = %114
  store i32 12, ptr %7, align 4
  br label %129

120:                                              ; preds = %114
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %121, i32 0, i32 0
  %123 = load i32, ptr %122, align 4, !tbaa !15
  %124 = load ptr, ptr %12, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %124, i32 0, i32 0
  %126 = load i32, ptr %125, align 4, !tbaa !15
  %127 = icmp eq i32 %123, %126
  store i1 %127, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %129

128:                                              ; No predecessors!
  store i8 0, ptr %10, align 1, !tbaa !11
  br label %114, !llvm.loop !19

129:                                              ; preds = %120, %119
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  %130 = load i32, ptr %7, align 4
  switch i32 %130, label %133 [
    i32 12, label %131
  ]

131:                                              ; preds = %129
  br label %132

132:                                              ; preds = %131
  store i8 0, ptr %10, align 1, !tbaa !11
  br label %105, !llvm.loop !21

133:                                              ; preds = %129, %108
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #7
  %134 = load i32, ptr %7, align 4
  switch i32 %134, label %741 [
    i32 9, label %135
  ]

135:                                              ; preds = %133
  br label %739

136:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #7
  store i8 1, ptr %13, align 1, !tbaa !11
  br label %137

137:                                              ; preds = %157, %136
  %138 = load i8, ptr %13, align 1, !tbaa !11, !range !13, !noundef !14
  %139 = trunc i8 %138 to i1
  br i1 %139, label %141, label %140

140:                                              ; preds = %137
  store i32 15, ptr %7, align 4
  br label %158

141:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  %143 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %142)
  store ptr %143, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %144 = load ptr, ptr %9, align 8, !tbaa !5
  %145 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %144)
  store ptr %145, ptr %15, align 8, !tbaa !5
  br label %146

146:                                              ; preds = %153, %141
  %147 = load ptr, ptr %14, align 8, !tbaa !5
  %148 = load ptr, ptr %15, align 8, !tbaa !5
  %149 = load i8, ptr %13, align 1, !tbaa !11, !range !13, !noundef !14
  %150 = trunc i8 %149 to i1
  br i1 %150, label %152, label %151

151:                                              ; preds = %146
  store i32 18, ptr %7, align 4
  br label %154

152:                                              ; preds = %146
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %154

153:                                              ; No predecessors!
  store i8 0, ptr %13, align 1, !tbaa !11
  br label %146, !llvm.loop !22

154:                                              ; preds = %152, %151
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  %155 = load i32, ptr %7, align 4
  switch i32 %155, label %158 [
    i32 18, label %156
  ]

156:                                              ; preds = %154
  br label %157

157:                                              ; preds = %156
  store i8 0, ptr %13, align 1, !tbaa !11
  br label %137, !llvm.loop !23

158:                                              ; preds = %154, %140
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  %159 = load i32, ptr %7, align 4
  switch i32 %159, label %741 [
    i32 15, label %160
  ]

160:                                              ; preds = %158
  br label %739

161:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #7
  store i8 1, ptr %16, align 1, !tbaa !11
  br label %162

162:                                              ; preds = %187, %161
  %163 = load i8, ptr %16, align 1, !tbaa !11, !range !13, !noundef !14
  %164 = trunc i8 %163 to i1
  br i1 %164, label %166, label %165

165:                                              ; preds = %162
  store i32 21, ptr %7, align 4
  br label %188

166:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %167 = load ptr, ptr %8, align 8, !tbaa !5
  %168 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %167)
  store ptr %168, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %169 = load ptr, ptr %9, align 8, !tbaa !5
  %170 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %169)
  store ptr %170, ptr %18, align 8, !tbaa !5
  br label %171

171:                                              ; preds = %183, %166
  %172 = load ptr, ptr %17, align 8, !tbaa !5
  %173 = load ptr, ptr %18, align 8, !tbaa !5
  %174 = load i8, ptr %16, align 1, !tbaa !11, !range !13, !noundef !14
  %175 = trunc i8 %174 to i1
  br i1 %175, label %177, label %176

176:                                              ; preds = %171
  store i32 24, ptr %7, align 4
  br label %184

177:                                              ; preds = %171
  %178 = load ptr, ptr %17, align 8, !tbaa !5
  %179 = load i32, ptr %178, align 4, !tbaa !24
  %180 = load ptr, ptr %18, align 8, !tbaa !5
  %181 = load i32, ptr %180, align 4, !tbaa !24
  %182 = icmp eq i32 %179, %181
  store i1 %182, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %184

183:                                              ; No predecessors!
  store i8 0, ptr %16, align 1, !tbaa !11
  br label %171, !llvm.loop !26

184:                                              ; preds = %177, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  %185 = load i32, ptr %7, align 4
  switch i32 %185, label %188 [
    i32 24, label %186
  ]

186:                                              ; preds = %184
  br label %187

187:                                              ; preds = %186
  store i8 0, ptr %16, align 1, !tbaa !11
  br label %162, !llvm.loop !27

188:                                              ; preds = %184, %165
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  %189 = load i32, ptr %7, align 4
  switch i32 %189, label %741 [
    i32 21, label %190
  ]

190:                                              ; preds = %188
  br label %739

191:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #7
  store i8 1, ptr %19, align 1, !tbaa !11
  br label %192

192:                                              ; preds = %217, %191
  %193 = load i8, ptr %19, align 1, !tbaa !11, !range !13, !noundef !14
  %194 = trunc i8 %193 to i1
  br i1 %194, label %196, label %195

195:                                              ; preds = %192
  store i32 27, ptr %7, align 4
  br label %218

196:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %197 = load ptr, ptr %8, align 8, !tbaa !5
  %198 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %197)
  store ptr %198, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %199 = load ptr, ptr %9, align 8, !tbaa !5
  %200 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %199)
  store ptr %200, ptr %21, align 8, !tbaa !5
  br label %201

201:                                              ; preds = %213, %196
  %202 = load ptr, ptr %20, align 8, !tbaa !5
  %203 = load ptr, ptr %21, align 8, !tbaa !5
  %204 = load i8, ptr %19, align 1, !tbaa !11, !range !13, !noundef !14
  %205 = trunc i8 %204 to i1
  br i1 %205, label %207, label %206

206:                                              ; preds = %201
  store i32 30, ptr %7, align 4
  br label %214

207:                                              ; preds = %201
  %208 = load ptr, ptr %20, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %21, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %210, i32 0, i32 0
  %212 = call noundef zeroext i1 @_ZNK3HIR4PatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %209, ptr noundef nonnull align 8 dereferenceable(88) %211)
  store i1 %212, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %214

213:                                              ; No predecessors!
  store i8 0, ptr %19, align 1, !tbaa !11
  br label %201, !llvm.loop !28

214:                                              ; preds = %207, %206
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  %215 = load i32, ptr %7, align 4
  switch i32 %215, label %218 [
    i32 30, label %216
  ]

216:                                              ; preds = %214
  br label %217

217:                                              ; preds = %216
  store i8 0, ptr %19, align 1, !tbaa !11
  br label %192, !llvm.loop !29

218:                                              ; preds = %214, %195
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  %219 = load i32, ptr %7, align 4
  switch i32 %219, label %741 [
    i32 27, label %220
  ]

220:                                              ; preds = %218
  br label %739

221:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  store i8 1, ptr %22, align 1, !tbaa !11
  br label %222

222:                                              ; preds = %249, %221
  %223 = load i8, ptr %22, align 1, !tbaa !11, !range !13, !noundef !14
  %224 = trunc i8 %223 to i1
  br i1 %224, label %226, label %225

225:                                              ; preds = %222
  store i32 33, ptr %7, align 4
  br label %250

226:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %227 = load ptr, ptr %8, align 8, !tbaa !5
  %228 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %227)
  store ptr %228, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %229)
  store ptr %230, ptr %24, align 8, !tbaa !5
  br label %231

231:                                              ; preds = %245, %226
  %232 = load ptr, ptr %23, align 8, !tbaa !5
  %233 = load ptr, ptr %24, align 8, !tbaa !5
  %234 = load i8, ptr %22, align 1, !tbaa !11, !range !13, !noundef !14
  %235 = trunc i8 %234 to i1
  br i1 %235, label %237, label %236

236:                                              ; preds = %231
  store i32 36, ptr %7, align 4
  br label %246

237:                                              ; preds = %231
  %238 = load ptr, ptr %23, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %238, i32 0, i32 1
  %240 = load i32, ptr %239, align 8, !tbaa !30
  %241 = load ptr, ptr %24, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %241, i32 0, i32 1
  %243 = load i32, ptr %242, align 8, !tbaa !30
  %244 = icmp eq i32 %240, %243
  store i1 %244, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %246

245:                                              ; No predecessors!
  store i8 0, ptr %22, align 1, !tbaa !11
  br label %231, !llvm.loop !33

246:                                              ; preds = %237, %236
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  %247 = load i32, ptr %7, align 4
  switch i32 %247, label %250 [
    i32 36, label %248
  ]

248:                                              ; preds = %246
  br label %249

249:                                              ; preds = %248
  store i8 0, ptr %22, align 1, !tbaa !11
  br label %222, !llvm.loop !34

250:                                              ; preds = %246, %225
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  %251 = load i32, ptr %7, align 4
  switch i32 %251, label %741 [
    i32 33, label %252
  ]

252:                                              ; preds = %250
  br label %739

253:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #7
  store i8 1, ptr %25, align 1, !tbaa !11
  br label %254

254:                                              ; preds = %318, %253
  %255 = load i8, ptr %25, align 1, !tbaa !11, !range !13, !noundef !14
  %256 = trunc i8 %255 to i1
  br i1 %256, label %258, label %257

257:                                              ; preds = %254
  store i32 39, ptr %7, align 4
  br label %319

258:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  %260 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %259)
  store ptr %260, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %261 = load ptr, ptr %9, align 8, !tbaa !5
  %262 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %261)
  store ptr %262, ptr %27, align 8, !tbaa !5
  br label %263

263:                                              ; preds = %314, %258
  %264 = load ptr, ptr %26, align 8, !tbaa !5
  %265 = load ptr, ptr %27, align 8, !tbaa !5
  %266 = load i8, ptr %25, align 1, !tbaa !11, !range !13, !noundef !14
  %267 = trunc i8 %266 to i1
  br i1 %267, label %269, label %268

268:                                              ; preds = %263
  store i32 42, ptr %7, align 4
  br label %315

269:                                              ; preds = %263
  %270 = load ptr, ptr %26, align 8, !tbaa !5
  %271 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %270, i32 0, i32 0
  %272 = load ptr, ptr %27, align 8, !tbaa !5
  %273 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %272, i32 0, i32 0
  %274 = call noundef zeroext i1 @_ZNK3HIR9TraitPathneERKS0_(ptr noundef nonnull align 8 dereferenceable(144) %271, ptr noundef nonnull align 8 dereferenceable(144) %273)
  br i1 %274, label %275, label %276

275:                                              ; preds = %269
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %315

276:                                              ; preds = %269
  %277 = load ptr, ptr %26, align 8, !tbaa !5
  %278 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %277, i32 0, i32 1
  %279 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %278) #7
  %280 = load ptr, ptr %27, align 8, !tbaa !5
  %281 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %280, i32 0, i32 1
  %282 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %281) #7
  %283 = icmp ne i64 %279, %282
  br i1 %283, label %284, label %285

284:                                              ; preds = %276
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %315

285:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  store i32 0, ptr %28, align 4, !tbaa !35
  br label %286

286:                                              ; preds = %308, %285
  %287 = load i32, ptr %28, align 4, !tbaa !35
  %288 = zext i32 %287 to i64
  %289 = load ptr, ptr %26, align 8, !tbaa !5
  %290 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %289, i32 0, i32 1
  %291 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %290) #7
  %292 = icmp ult i64 %288, %291
  br i1 %292, label %294, label %293

293:                                              ; preds = %286
  store i32 45, ptr %7, align 4
  br label %311

294:                                              ; preds = %286
  %295 = load ptr, ptr %26, align 8, !tbaa !5
  %296 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %295, i32 0, i32 1
  %297 = load i32, ptr %28, align 4, !tbaa !35
  %298 = zext i32 %297 to i64
  %299 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %296, i64 noundef %298) #7
  %300 = load ptr, ptr %27, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %300, i32 0, i32 1
  %302 = load i32, ptr %28, align 4, !tbaa !35
  %303 = zext i32 %302 to i64
  %304 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %301, i64 noundef %303) #7
  %305 = call noundef zeroext i1 @_ZNK3HIR11GenericPathneERKS0_(ptr noundef nonnull align 8 dereferenceable(32) %299, ptr noundef nonnull align 8 dereferenceable(32) %304)
  br i1 %305, label %306, label %307

306:                                              ; preds = %294
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %311

307:                                              ; preds = %294
  br label %308

308:                                              ; preds = %307
  %309 = load i32, ptr %28, align 4, !tbaa !35
  %310 = add i32 %309, 1
  store i32 %310, ptr %28, align 4, !tbaa !35
  br label %286, !llvm.loop !36

311:                                              ; preds = %306, %293
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  %312 = load i32, ptr %7, align 4
  switch i32 %312, label %315 [
    i32 45, label %313
  ]

313:                                              ; preds = %311
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %315

314:                                              ; No predecessors!
  store i8 0, ptr %25, align 1, !tbaa !11
  br label %263, !llvm.loop !37

315:                                              ; preds = %313, %311, %284, %275, %268
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  %316 = load i32, ptr %7, align 4
  switch i32 %316, label %319 [
    i32 42, label %317
  ]

317:                                              ; preds = %315
  br label %318

318:                                              ; preds = %317
  store i8 0, ptr %25, align 1, !tbaa !11
  br label %254, !llvm.loop !38

319:                                              ; preds = %315, %257
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  %320 = load i32, ptr %7, align 4
  switch i32 %320, label %741 [
    i32 39, label %321
  ]

321:                                              ; preds = %319
  br label %739

322:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #7
  store i8 1, ptr %29, align 1, !tbaa !11
  br label %323

323:                                              ; preds = %348, %322
  %324 = load i8, ptr %29, align 1, !tbaa !11, !range !13, !noundef !14
  %325 = trunc i8 %324 to i1
  br i1 %325, label %327, label %326

326:                                              ; preds = %323
  store i32 48, ptr %7, align 4
  br label %349

327:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %328 = load ptr, ptr %8, align 8, !tbaa !5
  %329 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %328)
  store ptr %329, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %330 = load ptr, ptr %9, align 8, !tbaa !5
  %331 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %330)
  store ptr %331, ptr %31, align 8, !tbaa !5
  br label %332

332:                                              ; preds = %344, %327
  %333 = load ptr, ptr %30, align 8, !tbaa !5
  %334 = load ptr, ptr %31, align 8, !tbaa !5
  %335 = load i8, ptr %29, align 1, !tbaa !11, !range !13, !noundef !14
  %336 = trunc i8 %335 to i1
  br i1 %336, label %338, label %337

337:                                              ; preds = %332
  store i32 51, ptr %7, align 4
  br label %345

338:                                              ; preds = %332
  %339 = load ptr, ptr %30, align 8, !tbaa !5
  %340 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %339, i32 0, i32 3
  %341 = load ptr, ptr %31, align 8, !tbaa !5
  %342 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %341, i32 0, i32 3
  %343 = call noundef zeroext i1 @_ZeqRKN3HIR25TypeData_ErasedType_InnerES2_(ptr noundef nonnull align 8 dereferenceable(104) %340, ptr noundef nonnull align 8 dereferenceable(104) %342)
  store i1 %343, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %345

344:                                              ; No predecessors!
  store i8 0, ptr %29, align 1, !tbaa !11
  br label %332, !llvm.loop !39

345:                                              ; preds = %338, %337
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  %346 = load i32, ptr %7, align 4
  switch i32 %346, label %349 [
    i32 51, label %347
  ]

347:                                              ; preds = %345
  br label %348

348:                                              ; preds = %347
  store i8 0, ptr %29, align 1, !tbaa !11
  br label %323, !llvm.loop !40

349:                                              ; preds = %345, %326
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  %350 = load i32, ptr %7, align 4
  switch i32 %350, label %741 [
    i32 48, label %351
  ]

351:                                              ; preds = %349
  br label %739

352:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #7
  store i8 1, ptr %32, align 1, !tbaa !11
  br label %353

353:                                              ; preds = %387, %352
  %354 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %355 = trunc i8 %354 to i1
  br i1 %355, label %357, label %356

356:                                              ; preds = %353
  store i32 54, ptr %7, align 4
  br label %388

357:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %358 = load ptr, ptr %8, align 8, !tbaa !5
  %359 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %358)
  store ptr %359, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %360 = load ptr, ptr %9, align 8, !tbaa !5
  %361 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %360)
  store ptr %361, ptr %34, align 8, !tbaa !5
  br label %362

362:                                              ; preds = %383, %357
  %363 = load ptr, ptr %33, align 8, !tbaa !5
  %364 = load ptr, ptr %34, align 8, !tbaa !5
  %365 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %366 = trunc i8 %365 to i1
  br i1 %366, label %368, label %367

367:                                              ; preds = %362
  store i32 57, ptr %7, align 4
  br label %384

368:                                              ; preds = %362
  %369 = load ptr, ptr %33, align 8, !tbaa !5
  %370 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %369, i32 0, i32 0
  %371 = load ptr, ptr %34, align 8, !tbaa !5
  %372 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %371, i32 0, i32 0
  %373 = call noundef zeroext i1 @_ZNK3HIR7TypeRefneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %370, ptr noundef nonnull align 8 dereferenceable(8) %372)
  br i1 %373, label %374, label %375

374:                                              ; preds = %368
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %384

375:                                              ; preds = %368
  %376 = load ptr, ptr %34, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %376, i32 0, i32 1
  %378 = load ptr, ptr %33, align 8, !tbaa !5
  %379 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %378, i32 0, i32 1
  %380 = call noundef zeroext i1 @_ZNK3HIR9ArraySizeneERKS0_(ptr noundef nonnull align 8 dereferenceable(32) %377, ptr noundef nonnull align 8 dereferenceable(32) %379)
  br i1 %380, label %381, label %382

381:                                              ; preds = %375
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %384

382:                                              ; preds = %375
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %384

383:                                              ; No predecessors!
  store i8 0, ptr %32, align 1, !tbaa !11
  br label %362, !llvm.loop !41

384:                                              ; preds = %382, %381, %374, %367
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  %385 = load i32, ptr %7, align 4
  switch i32 %385, label %388 [
    i32 57, label %386
  ]

386:                                              ; preds = %384
  br label %387

387:                                              ; preds = %386
  store i8 0, ptr %32, align 1, !tbaa !11
  br label %353, !llvm.loop !42

388:                                              ; preds = %384, %356
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #7
  %389 = load i32, ptr %7, align 4
  switch i32 %389, label %741 [
    i32 54, label %390
  ]

390:                                              ; preds = %388
  br label %739

391:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #7
  store i8 1, ptr %35, align 1, !tbaa !11
  br label %392

392:                                              ; preds = %417, %391
  %393 = load i8, ptr %35, align 1, !tbaa !11, !range !13, !noundef !14
  %394 = trunc i8 %393 to i1
  br i1 %394, label %396, label %395

395:                                              ; preds = %392
  store i32 60, ptr %7, align 4
  br label %418

396:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %397 = load ptr, ptr %8, align 8, !tbaa !5
  %398 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %397)
  store ptr %398, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %399 = load ptr, ptr %9, align 8, !tbaa !5
  %400 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %399)
  store ptr %400, ptr %37, align 8, !tbaa !5
  br label %401

401:                                              ; preds = %413, %396
  %402 = load ptr, ptr %36, align 8, !tbaa !5
  %403 = load ptr, ptr %37, align 8, !tbaa !5
  %404 = load i8, ptr %35, align 1, !tbaa !11, !range !13, !noundef !14
  %405 = trunc i8 %404 to i1
  br i1 %405, label %407, label %406

406:                                              ; preds = %401
  store i32 63, ptr %7, align 4
  br label %414

407:                                              ; preds = %401
  %408 = load ptr, ptr %36, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %408, i32 0, i32 0
  %410 = load ptr, ptr %37, align 8, !tbaa !5
  %411 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %410, i32 0, i32 0
  %412 = call noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %409, ptr noundef nonnull align 8 dereferenceable(8) %411)
  store i1 %412, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %414

413:                                              ; No predecessors!
  store i8 0, ptr %35, align 1, !tbaa !11
  br label %401, !llvm.loop !43

414:                                              ; preds = %407, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  %415 = load i32, ptr %7, align 4
  switch i32 %415, label %418 [
    i32 63, label %416
  ]

416:                                              ; preds = %414
  br label %417

417:                                              ; preds = %416
  store i8 0, ptr %35, align 1, !tbaa !11
  br label %392, !llvm.loop !44

418:                                              ; preds = %414, %395
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  %419 = load i32, ptr %7, align 4
  switch i32 %419, label %741 [
    i32 60, label %420
  ]

420:                                              ; preds = %418
  br label %739

421:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #7
  store i8 1, ptr %38, align 1, !tbaa !11
  br label %422

422:                                              ; preds = %474, %421
  %423 = load i8, ptr %38, align 1, !tbaa !11, !range !13, !noundef !14
  %424 = trunc i8 %423 to i1
  br i1 %424, label %426, label %425

425:                                              ; preds = %422
  store i32 66, ptr %7, align 4
  br label %475

426:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %427 = load ptr, ptr %8, align 8, !tbaa !5
  %428 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %427)
  store ptr %428, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %429 = load ptr, ptr %9, align 8, !tbaa !5
  %430 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %429)
  store ptr %430, ptr %40, align 8, !tbaa !5
  br label %431

431:                                              ; preds = %470, %426
  %432 = load ptr, ptr %39, align 8, !tbaa !5
  %433 = load ptr, ptr %40, align 8, !tbaa !5
  %434 = load i8, ptr %38, align 1, !tbaa !11, !range !13, !noundef !14
  %435 = trunc i8 %434 to i1
  br i1 %435, label %437, label %436

436:                                              ; preds = %431
  store i32 69, ptr %7, align 4
  br label %471

437:                                              ; preds = %431
  %438 = load ptr, ptr %39, align 8, !tbaa !5
  %439 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %438) #7
  %440 = load ptr, ptr %40, align 8, !tbaa !5
  %441 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %440) #7
  %442 = icmp ne i64 %439, %441
  br i1 %442, label %443, label %444

443:                                              ; preds = %437
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %471

444:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  store i32 0, ptr %41, align 4, !tbaa !35
  br label %445

445:                                              ; preds = %464, %444
  %446 = load i32, ptr %41, align 4, !tbaa !35
  %447 = zext i32 %446 to i64
  %448 = load ptr, ptr %39, align 8, !tbaa !5
  %449 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %448) #7
  %450 = icmp ult i64 %447, %449
  br i1 %450, label %452, label %451

451:                                              ; preds = %445
  store i32 72, ptr %7, align 4
  br label %467

452:                                              ; preds = %445
  %453 = load ptr, ptr %39, align 8, !tbaa !5
  %454 = load i32, ptr %41, align 4, !tbaa !35
  %455 = zext i32 %454 to i64
  %456 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %453, i64 noundef %455) #7
  %457 = load ptr, ptr %40, align 8, !tbaa !5
  %458 = load i32, ptr %41, align 4, !tbaa !35
  %459 = zext i32 %458 to i64
  %460 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %457, i64 noundef %459) #7
  %461 = call noundef zeroext i1 @_ZNK3HIR7TypeRefneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %456, ptr noundef nonnull align 8 dereferenceable(8) %460)
  br i1 %461, label %462, label %463

462:                                              ; preds = %452
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %467

463:                                              ; preds = %452
  br label %464

464:                                              ; preds = %463
  %465 = load i32, ptr %41, align 4, !tbaa !35
  %466 = add i32 %465, 1
  store i32 %466, ptr %41, align 4, !tbaa !35
  br label %445, !llvm.loop !45

467:                                              ; preds = %462, %451
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  %468 = load i32, ptr %7, align 4
  switch i32 %468, label %471 [
    i32 72, label %469
  ]

469:                                              ; preds = %467
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %471

470:                                              ; No predecessors!
  store i8 0, ptr %38, align 1, !tbaa !11
  br label %431, !llvm.loop !46

471:                                              ; preds = %469, %467, %443, %436
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  %472 = load i32, ptr %7, align 4
  switch i32 %472, label %475 [
    i32 69, label %473
  ]

473:                                              ; preds = %471
  br label %474

474:                                              ; preds = %473
  store i8 0, ptr %38, align 1, !tbaa !11
  br label %422, !llvm.loop !47

475:                                              ; preds = %471, %425
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #7
  %476 = load i32, ptr %7, align 4
  switch i32 %476, label %741 [
    i32 66, label %477
  ]

477:                                              ; preds = %475
  br label %739

478:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #7
  store i8 1, ptr %42, align 1, !tbaa !11
  br label %479

479:                                              ; preds = %513, %478
  %480 = load i8, ptr %42, align 1, !tbaa !11, !range !13, !noundef !14
  %481 = trunc i8 %480 to i1
  br i1 %481, label %483, label %482

482:                                              ; preds = %479
  store i32 75, ptr %7, align 4
  br label %514

483:                                              ; preds = %479
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %484 = load ptr, ptr %8, align 8, !tbaa !5
  %485 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %484)
  store ptr %485, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  %486 = load ptr, ptr %9, align 8, !tbaa !5
  %487 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %486)
  store ptr %487, ptr %44, align 8, !tbaa !5
  br label %488

488:                                              ; preds = %509, %483
  %489 = load ptr, ptr %43, align 8, !tbaa !5
  %490 = load ptr, ptr %44, align 8, !tbaa !5
  %491 = load i8, ptr %42, align 1, !tbaa !11, !range !13, !noundef !14
  %492 = trunc i8 %491 to i1
  br i1 %492, label %494, label %493

493:                                              ; preds = %488
  store i32 78, ptr %7, align 4
  br label %510

494:                                              ; preds = %488
  %495 = load ptr, ptr %43, align 8, !tbaa !5
  %496 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %495, i32 0, i32 1
  %497 = load i32, ptr %496, align 4, !tbaa !48
  %498 = load ptr, ptr %44, align 8, !tbaa !5
  %499 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %498, i32 0, i32 1
  %500 = load i32, ptr %499, align 4, !tbaa !48
  %501 = icmp ne i32 %497, %500
  br i1 %501, label %502, label %503

502:                                              ; preds = %494
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %510

503:                                              ; preds = %494
  %504 = load ptr, ptr %43, align 8, !tbaa !5
  %505 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %504, i32 0, i32 2
  %506 = load ptr, ptr %44, align 8, !tbaa !5
  %507 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %506, i32 0, i32 2
  %508 = call noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %505, ptr noundef nonnull align 8 dereferenceable(8) %507)
  store i1 %508, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %510

509:                                              ; No predecessors!
  store i8 0, ptr %42, align 1, !tbaa !11
  br label %488, !llvm.loop !52

510:                                              ; preds = %503, %502, %493
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  %511 = load i32, ptr %7, align 4
  switch i32 %511, label %514 [
    i32 78, label %512
  ]

512:                                              ; preds = %510
  br label %513

513:                                              ; preds = %512
  store i8 0, ptr %42, align 1, !tbaa !11
  br label %479, !llvm.loop !53

514:                                              ; preds = %510, %482
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #7
  %515 = load i32, ptr %7, align 4
  switch i32 %515, label %741 [
    i32 75, label %516
  ]

516:                                              ; preds = %514
  br label %739

517:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #7
  store i8 1, ptr %45, align 1, !tbaa !11
  br label %518

518:                                              ; preds = %552, %517
  %519 = load i8, ptr %45, align 1, !tbaa !11, !range !13, !noundef !14
  %520 = trunc i8 %519 to i1
  br i1 %520, label %522, label %521

521:                                              ; preds = %518
  store i32 81, ptr %7, align 4
  br label %553

522:                                              ; preds = %518
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %523 = load ptr, ptr %8, align 8, !tbaa !5
  %524 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %523)
  store ptr %524, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %525 = load ptr, ptr %9, align 8, !tbaa !5
  %526 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %525)
  store ptr %526, ptr %47, align 8, !tbaa !5
  br label %527

527:                                              ; preds = %548, %522
  %528 = load ptr, ptr %46, align 8, !tbaa !5
  %529 = load ptr, ptr %47, align 8, !tbaa !5
  %530 = load i8, ptr %45, align 1, !tbaa !11, !range !13, !noundef !14
  %531 = trunc i8 %530 to i1
  br i1 %531, label %533, label %532

532:                                              ; preds = %527
  store i32 84, ptr %7, align 4
  br label %549

533:                                              ; preds = %527
  %534 = load ptr, ptr %46, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %534, i32 0, i32 0
  %536 = load i32, ptr %535, align 8, !tbaa !54
  %537 = load ptr, ptr %47, align 8, !tbaa !5
  %538 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %537, i32 0, i32 0
  %539 = load i32, ptr %538, align 8, !tbaa !54
  %540 = icmp ne i32 %536, %539
  br i1 %540, label %541, label %542

541:                                              ; preds = %533
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %549

542:                                              ; preds = %533
  %543 = load ptr, ptr %46, align 8, !tbaa !5
  %544 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %543, i32 0, i32 1
  %545 = load ptr, ptr %47, align 8, !tbaa !5
  %546 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %545, i32 0, i32 1
  %547 = call noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %544, ptr noundef nonnull align 8 dereferenceable(8) %546)
  store i1 %547, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %549

548:                                              ; No predecessors!
  store i8 0, ptr %45, align 1, !tbaa !11
  br label %527, !llvm.loop !56

549:                                              ; preds = %542, %541, %532
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  %550 = load i32, ptr %7, align 4
  switch i32 %550, label %553 [
    i32 84, label %551
  ]

551:                                              ; preds = %549
  br label %552

552:                                              ; preds = %551
  store i8 0, ptr %45, align 1, !tbaa !11
  br label %518, !llvm.loop !57

553:                                              ; preds = %549, %521
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  %554 = load i32, ptr %7, align 4
  switch i32 %554, label %741 [
    i32 81, label %555
  ]

555:                                              ; preds = %553
  br label %739

556:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #7
  store i8 1, ptr %48, align 1, !tbaa !11
  br label %557

557:                                              ; preds = %582, %556
  %558 = load i8, ptr %48, align 1, !tbaa !11, !range !13, !noundef !14
  %559 = trunc i8 %558 to i1
  br i1 %559, label %561, label %560

560:                                              ; preds = %557
  store i32 87, ptr %7, align 4
  br label %583

561:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %562 = load ptr, ptr %8, align 8, !tbaa !5
  %563 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %562)
  store ptr %563, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  %564 = load ptr, ptr %9, align 8, !tbaa !5
  %565 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %564)
  store ptr %565, ptr %50, align 8, !tbaa !5
  br label %566

566:                                              ; preds = %578, %561
  %567 = load ptr, ptr %49, align 8, !tbaa !5
  %568 = load ptr, ptr %50, align 8, !tbaa !5
  %569 = load i8, ptr %48, align 1, !tbaa !11, !range !13, !noundef !14
  %570 = trunc i8 %569 to i1
  br i1 %570, label %572, label %571

571:                                              ; preds = %566
  store i32 90, ptr %7, align 4
  br label %579

572:                                              ; preds = %566
  %573 = load ptr, ptr %49, align 8, !tbaa !5
  %574 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %573, i32 0, i32 0
  %575 = load ptr, ptr %50, align 8, !tbaa !5
  %576 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %575, i32 0, i32 0
  %577 = call noundef zeroext i1 @_ZNK3HIR4PatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %574, ptr noundef nonnull align 8 dereferenceable(88) %576)
  store i1 %577, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %579

578:                                              ; No predecessors!
  store i8 0, ptr %48, align 1, !tbaa !11
  br label %566, !llvm.loop !58

579:                                              ; preds = %572, %571
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  %580 = load i32, ptr %7, align 4
  switch i32 %580, label %583 [
    i32 90, label %581
  ]

581:                                              ; preds = %579
  br label %582

582:                                              ; preds = %581
  store i8 0, ptr %48, align 1, !tbaa !11
  br label %557, !llvm.loop !59

583:                                              ; preds = %579, %560
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  %584 = load i32, ptr %7, align 4
  switch i32 %584, label %741 [
    i32 87, label %585
  ]

585:                                              ; preds = %583
  br label %739

586:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %51) #7
  store i8 1, ptr %51, align 1, !tbaa !11
  br label %587

587:                                              ; preds = %669, %586
  %588 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %589 = trunc i8 %588 to i1
  br i1 %589, label %591, label %590

590:                                              ; preds = %587
  store i32 93, ptr %7, align 4
  br label %670

591:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  %592 = load ptr, ptr %8, align 8, !tbaa !5
  %593 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %592)
  store ptr %593, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  %594 = load ptr, ptr %9, align 8, !tbaa !5
  %595 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %594)
  store ptr %595, ptr %53, align 8, !tbaa !5
  br label %596

596:                                              ; preds = %665, %591
  %597 = load ptr, ptr %52, align 8, !tbaa !5
  %598 = load ptr, ptr %53, align 8, !tbaa !5
  %599 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %600 = trunc i8 %599 to i1
  br i1 %600, label %602, label %601

601:                                              ; preds = %596
  store i32 96, ptr %7, align 4
  br label %666

602:                                              ; preds = %596
  %603 = load ptr, ptr %52, align 8, !tbaa !5
  %604 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %603, i32 0, i32 1
  %605 = load i8, ptr %604, align 8, !tbaa !60, !range !13, !noundef !14
  %606 = trunc i8 %605 to i1
  %607 = zext i1 %606 to i32
  %608 = load ptr, ptr %53, align 8, !tbaa !5
  %609 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %608, i32 0, i32 1
  %610 = load i8, ptr %609, align 8, !tbaa !60, !range !13, !noundef !14
  %611 = trunc i8 %610 to i1
  %612 = zext i1 %611 to i32
  %613 = icmp ne i32 %607, %612
  br i1 %613, label %614, label %615

614:                                              ; preds = %602
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %666

615:                                              ; preds = %602
  %616 = load ptr, ptr %52, align 8, !tbaa !5
  %617 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %616, i32 0, i32 3
  %618 = load ptr, ptr %53, align 8, !tbaa !5
  %619 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %618, i32 0, i32 3
  %620 = call noundef zeroext i1 @_ZNK8RcStringneERKS_(ptr noundef nonnull align 8 dereferenceable(8) %617, ptr noundef nonnull align 8 dereferenceable(8) %619)
  br i1 %620, label %621, label %622

621:                                              ; preds = %615
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %666

622:                                              ; preds = %615
  %623 = load ptr, ptr %52, align 8, !tbaa !5
  %624 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %623, i32 0, i32 5
  %625 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %624) #7
  %626 = load ptr, ptr %53, align 8, !tbaa !5
  %627 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %626, i32 0, i32 5
  %628 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %627) #7
  %629 = icmp ne i64 %625, %628
  br i1 %629, label %630, label %631

630:                                              ; preds = %622
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %666

631:                                              ; preds = %622
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #7
  store i32 0, ptr %54, align 4, !tbaa !35
  br label %632

632:                                              ; preds = %654, %631
  %633 = load i32, ptr %54, align 4, !tbaa !35
  %634 = zext i32 %633 to i64
  %635 = load ptr, ptr %52, align 8, !tbaa !5
  %636 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %635, i32 0, i32 5
  %637 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %636) #7
  %638 = icmp ult i64 %634, %637
  br i1 %638, label %640, label %639

639:                                              ; preds = %632
  store i32 99, ptr %7, align 4
  br label %657

640:                                              ; preds = %632
  %641 = load ptr, ptr %52, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %641, i32 0, i32 5
  %643 = load i32, ptr %54, align 4, !tbaa !35
  %644 = zext i32 %643 to i64
  %645 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %642, i64 noundef %644) #7
  %646 = load ptr, ptr %53, align 8, !tbaa !5
  %647 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %646, i32 0, i32 5
  %648 = load i32, ptr %54, align 4, !tbaa !35
  %649 = zext i32 %648 to i64
  %650 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %647, i64 noundef %649) #7
  %651 = call noundef zeroext i1 @_ZNK3HIR7TypeRefneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %645, ptr noundef nonnull align 8 dereferenceable(8) %650)
  br i1 %651, label %652, label %653

652:                                              ; preds = %640
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %657

653:                                              ; preds = %640
  br label %654

654:                                              ; preds = %653
  %655 = load i32, ptr %54, align 4, !tbaa !35
  %656 = add i32 %655, 1
  store i32 %656, ptr %54, align 4, !tbaa !35
  br label %632, !llvm.loop !83

657:                                              ; preds = %652, %639
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  %658 = load i32, ptr %7, align 4
  switch i32 %658, label %666 [
    i32 99, label %659
  ]

659:                                              ; preds = %657
  %660 = load ptr, ptr %52, align 8, !tbaa !5
  %661 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %660, i32 0, i32 4
  %662 = load ptr, ptr %53, align 8, !tbaa !5
  %663 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %662, i32 0, i32 4
  %664 = call noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %661, ptr noundef nonnull align 8 dereferenceable(8) %663)
  store i1 %664, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %666

665:                                              ; No predecessors!
  store i8 0, ptr %51, align 1, !tbaa !11
  br label %596, !llvm.loop !84

666:                                              ; preds = %659, %657, %630, %621, %614, %601
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  %667 = load i32, ptr %7, align 4
  switch i32 %667, label %670 [
    i32 96, label %668
  ]

668:                                              ; preds = %666
  br label %669

669:                                              ; preds = %668
  store i8 0, ptr %51, align 1, !tbaa !11
  br label %587, !llvm.loop !85

670:                                              ; preds = %666, %590
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #7
  %671 = load i32, ptr %7, align 4
  switch i32 %671, label %741 [
    i32 93, label %672
  ]

672:                                              ; preds = %670
  br label %739

673:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #7
  store i8 1, ptr %55, align 1, !tbaa !11
  br label %674

674:                                              ; preds = %703, %673
  %675 = load i8, ptr %55, align 1, !tbaa !11, !range !13, !noundef !14
  %676 = trunc i8 %675 to i1
  br i1 %676, label %678, label %677

677:                                              ; preds = %674
  store i32 102, ptr %7, align 4
  br label %704

678:                                              ; preds = %674
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  %679 = load ptr, ptr %8, align 8, !tbaa !5
  %680 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %679)
  store ptr %680, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #7
  %681 = load ptr, ptr %9, align 8, !tbaa !5
  %682 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %681)
  store ptr %682, ptr %57, align 8, !tbaa !5
  br label %683

683:                                              ; preds = %699, %678
  %684 = load ptr, ptr %56, align 8, !tbaa !5
  %685 = load ptr, ptr %57, align 8, !tbaa !5
  %686 = load i8, ptr %55, align 1, !tbaa !11, !range !13, !noundef !14
  %687 = trunc i8 %686 to i1
  br i1 %687, label %689, label %688

688:                                              ; preds = %683
  store i32 105, ptr %7, align 4
  br label %700

689:                                              ; preds = %683
  %690 = load ptr, ptr %56, align 8, !tbaa !5
  %691 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %690, i32 0, i32 0
  %692 = load ptr, ptr %691, align 8, !tbaa !86
  %693 = load ptr, ptr %57, align 8, !tbaa !5
  %694 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %693, i32 0, i32 0
  %695 = load ptr, ptr %694, align 8, !tbaa !86
  %696 = icmp ne ptr %692, %695
  br i1 %696, label %697, label %698

697:                                              ; preds = %689
  store i1 false, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %700

698:                                              ; preds = %689
  store i1 true, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %700

699:                                              ; No predecessors!
  store i8 0, ptr %55, align 1, !tbaa !11
  br label %683, !llvm.loop !88

700:                                              ; preds = %698, %697, %688
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  %701 = load i32, ptr %7, align 4
  switch i32 %701, label %704 [
    i32 105, label %702
  ]

702:                                              ; preds = %700
  br label %703

703:                                              ; preds = %702
  store i8 0, ptr %55, align 1, !tbaa !11
  br label %674, !llvm.loop !89

704:                                              ; preds = %700, %677
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #7
  %705 = load i32, ptr %7, align 4
  switch i32 %705, label %741 [
    i32 102, label %706
  ]

706:                                              ; preds = %704
  br label %739

707:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1, ptr %58) #7
  store i8 1, ptr %58, align 1, !tbaa !11
  br label %708

708:                                              ; preds = %735, %707
  %709 = load i8, ptr %58, align 1, !tbaa !11, !range !13, !noundef !14
  %710 = trunc i8 %709 to i1
  br i1 %710, label %712, label %711

711:                                              ; preds = %708
  store i32 108, ptr %7, align 4
  br label %736

712:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  %713 = load ptr, ptr %8, align 8, !tbaa !5
  %714 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %713)
  store ptr %714, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  %715 = load ptr, ptr %9, align 8, !tbaa !5
  %716 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %715)
  store ptr %716, ptr %60, align 8, !tbaa !5
  br label %717

717:                                              ; preds = %731, %712
  %718 = load ptr, ptr %59, align 8, !tbaa !5
  %719 = load ptr, ptr %60, align 8, !tbaa !5
  %720 = load i8, ptr %58, align 1, !tbaa !11, !range !13, !noundef !14
  %721 = trunc i8 %720 to i1
  br i1 %721, label %723, label %722

722:                                              ; preds = %717
  store i32 111, ptr %7, align 4
  br label %732

723:                                              ; preds = %717
  %724 = load ptr, ptr %59, align 8, !tbaa !5
  %725 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %724, i32 0, i32 0
  %726 = load ptr, ptr %725, align 8, !tbaa !90
  %727 = load ptr, ptr %60, align 8, !tbaa !5
  %728 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %727, i32 0, i32 0
  %729 = load ptr, ptr %728, align 8, !tbaa !90
  %730 = icmp eq ptr %726, %729
  store i1 %730, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %732

731:                                              ; No predecessors!
  store i8 0, ptr %58, align 1, !tbaa !11
  br label %717, !llvm.loop !92

732:                                              ; preds = %723, %722
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  %733 = load i32, ptr %7, align 4
  switch i32 %733, label %736 [
    i32 111, label %734
  ]

734:                                              ; preds = %732
  br label %735

735:                                              ; preds = %734
  store i8 0, ptr %58, align 1, !tbaa !11
  br label %708, !llvm.loop !93

736:                                              ; preds = %732, %711
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #7
  %737 = load i32, ptr %7, align 4
  switch i32 %737, label %741 [
    i32 108, label %738
  ]

738:                                              ; preds = %736
  br label %739

739:                                              ; preds = %738, %706, %672, %585, %555, %516, %477, %420, %390, %351, %321, %252, %220, %190, %160, %135, %100
  br label %740

740:                                              ; preds = %739
  store i8 0, ptr %6, align 1, !tbaa !11
  br label %96, !llvm.loop !94

741:                                              ; preds = %736, %704, %670, %583, %553, %514, %475, %418, %388, %349, %319, %250, %218, %188, %158, %133, %99
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  %742 = load i32, ptr %7, align 4
  switch i32 %742, label %745 [
    i32 5, label %743
  ]

743:                                              ; preds = %741
  br label %744

744:                                              ; preds = %743
  store i8 0, ptr %6, align 1, !tbaa !11
  br label %88, !llvm.loop !95

745:                                              ; preds = %741, %91
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #7
  %746 = load i32, ptr %7, align 4
  switch i32 %746, label %751 [
    i32 2, label %747
    i32 1, label %749
  ]

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

749:                                              ; preds = %745, %86, %78, %68
  %750 = load i1, ptr %3, align 1
  ret i1 %750

751:                                              ; preds = %745
  unreachable
}

declare noundef zeroext i1 @_ZNK3HIR4PatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) #5

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZeqRKN3HIR25TypeData_ErasedType_InnerES2_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(104)) #6

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

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

; 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 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 uwtable
declare dso_local noundef zeroext i1 @_ZNK8RcStringneERKS_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !17, i64 0}
!16 = !{!"_ZTSN3HIR8TypeData10Data_InferE", !17, i64 0, !18, i64 4}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSN3HIR10InferClassE", !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = !{!25, !25, i64 0}
!25 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}
!30 = !{!31, !17, i64 8}
!31 = !{!"_ZTSN3HIR10GenericRefE", !32, i64 0, !17, i64 8}
!32 = !{!"_ZTS8RcString", !6, i64 0}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = !{!17, !17, i64 0}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}
!45 = distinct !{!45, !20}
!46 = distinct !{!46, !20}
!47 = distinct !{!47, !20}
!48 = !{!49, !51, i64 4}
!49 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !50, i64 0, !51, i64 4, !10, i64 8}
!50 = !{!"_ZTSN3HIR11LifetimeRefE", !17, i64 0}
!51 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!52 = distinct !{!52, !20}
!53 = distinct !{!53, !20}
!54 = !{!55, !51, i64 0}
!55 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !51, i64 0, !10, i64 8}
!56 = distinct !{!56, !20}
!57 = distinct !{!57, !20}
!58 = distinct !{!58, !20}
!59 = distinct !{!59, !20}
!60 = !{!61, !12, i64 96}
!61 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !62, i64 0, !12, i64 96, !12, i64 97, !32, i64 104, !10, i64 112, !79, i64 120}
!62 = !{!"_ZTSN3HIR13GenericParamsE", !63, i64 0, !67, i64 24, !71, i64 48, !75, i64 72}
!63 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !64, i64 0}
!64 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!67 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !68, i64 0}
!68 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!71 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !72, i64 0}
!72 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !73, i64 0}
!73 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!75 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !76, i64 0}
!76 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !78, i64 0}
!78 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!79 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !80, i64 0}
!80 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !81, i64 0}
!81 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !82, i64 0}
!82 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!83 = distinct !{!83, !20}
!84 = distinct !{!84, !20}
!85 = distinct !{!85, !20}
!86 = !{!87, !6, i64 0}
!87 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !6, i64 0}
!88 = distinct !{!88, !20}
!89 = distinct !{!89, !20}
!90 = !{!91, !6, i64 0}
!91 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !6, i64 0}
!92 = distinct !{!92, !20}
!93 = distinct !{!93, !20}
!94 = distinct !{!94, !20}
!95 = distinct !{!95, !20}


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

@.str.18 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK3HIR7TypeRefeqERKS0_ = external hidden unnamed_addr constant [60 x i8], align 1

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1) local_unnamed_addr #3 align 2 {
.split457:
  %2 = load ptr, ptr %0, align 8, !tbaa !5
  %3 = load ptr, ptr %1, align 8, !tbaa !5
  %4 = icmp eq ptr %2, %3
  br i1 %4, label %.thread332, label %.lr.ph460

.lr.ph460:                                        ; preds = %.split457, %tailrecurse.backedge
  %5 = phi ptr [ %69, %tailrecurse.backedge ], [ %3, %.split457 ]
  %6 = phi ptr [ %68, %tailrecurse.backedge ], [ %2, %.split457 ]
  %.tr349459 = phi ptr [ %.tr349.be, %tailrecurse.backedge ], [ %1, %.split457 ]
  %.tr458 = phi ptr [ %.tr.be, %tailrecurse.backedge ], [ %0, %.split457 ]
  %.not = icmp eq ptr %6, null
  %.not304 = icmp eq ptr %5, null
  %or.cond = or i1 %.not, %.not304
  br i1 %or.cond, label %.thread332, label %7

7:                                                ; preds = %.lr.ph460
  %8 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %.tr458)
  %9 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %8)
  %10 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %.tr349459)
  %11 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %10)
  %.not305 = icmp eq i32 %9, %11
  br i1 %.not305, label %.preheader355, label %.thread332

.preheader355:                                    ; preds = %7
  %12 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %.tr458)
  %13 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %.tr349459)
  %14 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  switch i32 %14, label %.thread326 [
    i32 0, label %.split
    i32 1, label %.split393
    i32 2, label %.split396
    i32 3, label %.split400
    i32 4, label %.split404
    i32 5, label %.split408
    i32 6, label %.split412
    i32 7, label %.split416
    i32 8, label %.split420
    i32 9, label %.split424
    i32 10, label %.split428
    i32 11, label %.split432
    i32 12, label %.split436
    i32 13, label %.split440
    i32 14, label %.split444
    i32 15, label %.split448
    i32 16, label %.split452
  ], !llvm.loop !10

.split:                                           ; preds = %.preheader355
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 394, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRefeqERKS0_) #6
  unreachable

.split393:                                        ; preds = %.preheader355
  %15 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %16 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %17 = load i32, ptr %15, align 4, !tbaa !12
  %18 = load i32, ptr %16, align 4, !tbaa !12
  %19 = icmp eq i32 %17, %18
  br label %.thread332

.split396:                                        ; preds = %.preheader355
  %20 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %21 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  br label %.thread332

.split400:                                        ; preds = %.preheader355
  %22 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %23 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %24 = load i32, ptr %22, align 4, !tbaa !16
  %25 = load i32, ptr %23, align 4, !tbaa !16
  %26 = icmp eq i32 %24, %25
  br label %.thread332

.split404:                                        ; preds = %.preheader355
  %27 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %28 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %29 = tail call noundef zeroext i1 @_ZNK3HIR4PatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %27, ptr noundef nonnull align 8 dereferenceable(88) %28)
  br label %.thread332

.split408:                                        ; preds = %.preheader355
  %30 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %31 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %32 = getelementptr inbounds i8, ptr %30, i64 8
  %33 = load i32, ptr %32, align 8, !tbaa !18
  %34 = getelementptr inbounds i8, ptr %31, i64 8
  %35 = load i32, ptr %34, align 8, !tbaa !18
  %36 = icmp eq i32 %33, %35
  br label %.thread332

.split412:                                        ; preds = %.preheader355
  %37 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %38 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %39 = tail call noundef zeroext i1 @_ZNK3HIR9TraitPathneERKS0_(ptr noundef nonnull align 8 dereferenceable(144) %37, ptr noundef nonnull align 8 dereferenceable(144) %38)
  br i1 %39, label %.thread332, label %40

40:                                               ; preds = %.split412
  %41 = getelementptr inbounds i8, ptr %37, i64 144
  %42 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %41) #7
  %43 = getelementptr inbounds i8, ptr %38, i64 144
  %44 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %43) #7
  %.not314 = icmp eq i64 %42, %44
  br i1 %.not314, label %.preheader, label %.thread332

.preheader:                                       ; preds = %40
  %45 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %41) #7
  %.not315477.not = icmp eq i64 %45, 0
  br i1 %.not315477.not, label %.thread332, label %.lr.ph479

46:                                               ; preds = %.lr.ph479
  %47 = add i32 %.0291478, 1
  %48 = zext i32 %47 to i64
  %49 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %41) #7
  %.not315 = icmp ugt i64 %49, %48
  br i1 %.not315, label %.lr.ph479, label %.thread332.loopexit, !llvm.loop !21

.lr.ph479:                                        ; preds = %.preheader, %46
  %50 = phi i64 [ %48, %46 ], [ 0, %.preheader ]
  %.0291478 = phi i32 [ %47, %46 ], [ 0, %.preheader ]
  %51 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %50) #7
  %52 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %43, i64 noundef %50) #7
  %53 = tail call noundef zeroext i1 @_ZNK3HIR11GenericPathneERKS0_(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(32) %52)
  br i1 %53, label %.thread332.loopexit, label %46

.split416:                                        ; preds = %.preheader355
  %54 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %55 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %56 = getelementptr inbounds i8, ptr %54, i64 56
  %57 = getelementptr inbounds i8, ptr %55, i64 56
  %58 = tail call noundef zeroext i1 @_ZeqRKN3HIR25TypeData_ErasedType_InnerES2_(ptr noundef nonnull align 8 dereferenceable(104) %56, ptr noundef nonnull align 8 dereferenceable(104) %57)
  br label %.thread332

.split420:                                        ; preds = %.preheader355
  %59 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %60 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %61 = tail call noundef zeroext i1 @_ZNK3HIR7TypeRefneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %60)
  br i1 %61, label %.thread332, label %62

62:                                               ; preds = %.split420
  %63 = getelementptr inbounds i8, ptr %60, i64 8
  %64 = getelementptr inbounds i8, ptr %59, i64 8
  %65 = tail call noundef zeroext i1 @_ZNK3HIR9ArraySizeneERKS0_(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 8 dereferenceable(32) %64)
  %not. = xor i1 %65, true
  br label %.thread332

.split424:                                        ; preds = %.preheader355
  %66 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %67 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  br label %tailrecurse.backedge

tailrecurse.backedge:                             ; preds = %.split424, %90, %97, %._crit_edge
  %.tr.be = phi ptr [ %66, %.split424 ], [ %91, %90 ], [ %98, %97 ], [ %127, %._crit_edge ]
  %.tr349.be = phi ptr [ %67, %.split424 ], [ %92, %90 ], [ %99, %97 ], [ %128, %._crit_edge ]
  %68 = load ptr, ptr %.tr.be, align 8, !tbaa !5
  %69 = load ptr, ptr %.tr349.be, align 8, !tbaa !5
  %70 = icmp eq ptr %68, %69
  br i1 %70, label %.thread332, label %.lr.ph460

.split428:                                        ; preds = %.preheader355
  %71 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %72 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %73 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71) #7
  %74 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %72) #7
  %.not312 = icmp eq i64 %73, %74
  br i1 %.not312, label %.preheader350, label %.thread332

.preheader350:                                    ; preds = %.split428
  %75 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71) #7
  %.not313471.not = icmp eq i64 %75, 0
  br i1 %.not313471.not, label %.thread332, label %.lr.ph473

76:                                               ; preds = %.lr.ph473
  %77 = add i32 %.0296472, 1
  %78 = zext i32 %77 to i64
  %79 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71) #7
  %.not313 = icmp ugt i64 %79, %78
  br i1 %.not313, label %.lr.ph473, label %.thread332.loopexit483, !llvm.loop !22

.lr.ph473:                                        ; preds = %.preheader350, %76
  %80 = phi i64 [ %78, %76 ], [ 0, %.preheader350 ]
  %.0296472 = phi i32 [ %77, %76 ], [ 0, %.preheader350 ]
  %81 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %71, i64 noundef %80) #7
  %82 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %72, i64 noundef %80) #7
  %83 = tail call noundef zeroext i1 @_ZNK3HIR7TypeRefneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %81, ptr noundef nonnull align 8 dereferenceable(8) %82)
  br i1 %83, label %.thread332.loopexit483, label %76

.split432:                                        ; preds = %.preheader355
  %84 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %85 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %86 = getelementptr inbounds i8, ptr %84, i64 4
  %87 = load i32, ptr %86, align 4, !tbaa !23
  %88 = getelementptr inbounds i8, ptr %85, i64 4
  %89 = load i32, ptr %88, align 4, !tbaa !23
  %.not311 = icmp eq i32 %87, %89
  br i1 %.not311, label %90, label %.thread332

90:                                               ; preds = %.split432
  %91 = getelementptr inbounds i8, ptr %84, i64 8
  %92 = getelementptr inbounds i8, ptr %85, i64 8
  br label %tailrecurse.backedge

.split436:                                        ; preds = %.preheader355
  %93 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %94 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %95 = load i32, ptr %93, align 8, !tbaa !27
  %96 = load i32, ptr %94, align 8, !tbaa !27
  %.not310 = icmp eq i32 %95, %96
  br i1 %.not310, label %97, label %.thread332

97:                                               ; preds = %.split436
  %98 = getelementptr inbounds i8, ptr %93, i64 8
  %99 = getelementptr inbounds i8, ptr %94, i64 8
  br label %tailrecurse.backedge

.split440:                                        ; preds = %.preheader355
  %100 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %101 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %102 = tail call noundef zeroext i1 @_ZNK3HIR4PatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %100, ptr noundef nonnull align 8 dereferenceable(88) %101)
  br label %.thread332

.split444:                                        ; preds = %.preheader355
  %103 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %104 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %105 = getelementptr inbounds i8, ptr %103, i64 96
  %106 = load i8, ptr %105, align 8, !tbaa !29, !range !53, !noundef !54
  %107 = getelementptr inbounds i8, ptr %104, i64 96
  %108 = load i8, ptr %107, align 8, !tbaa !29, !range !53, !noundef !54
  %.not307 = icmp eq i8 %106, %108
  br i1 %.not307, label %109, label %.thread332

109:                                              ; preds = %.split444
  %110 = getelementptr inbounds i8, ptr %103, i64 104
  %111 = getelementptr inbounds i8, ptr %104, i64 104
  %112 = tail call noundef zeroext i1 @_ZNK8RcStringneERKS_(ptr noundef nonnull align 8 dereferenceable(8) %110, ptr noundef nonnull align 8 dereferenceable(8) %111)
  br i1 %112, label %.thread332, label %113

113:                                              ; preds = %109
  %114 = getelementptr inbounds i8, ptr %103, i64 120
  %115 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %114) #7
  %116 = getelementptr inbounds i8, ptr %104, i64 120
  %117 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %116) #7
  %.not308 = icmp eq i64 %115, %117
  br i1 %.not308, label %.preheader353, label %.thread332

.preheader353:                                    ; preds = %113
  %118 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %114) #7
  %.not309455.not = icmp eq i64 %118, 0
  br i1 %.not309455.not, label %._crit_edge, label %.lr.ph

119:                                              ; preds = %.lr.ph
  %120 = add i32 %.0283456, 1
  %121 = zext i32 %120 to i64
  %122 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %114) #7
  %.not309 = icmp ugt i64 %122, %121
  br i1 %.not309, label %.lr.ph, label %._crit_edge, !llvm.loop !55

.lr.ph:                                           ; preds = %.preheader353, %119
  %123 = phi i64 [ %121, %119 ], [ 0, %.preheader353 ]
  %.0283456 = phi i32 [ %120, %119 ], [ 0, %.preheader353 ]
  %124 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %114, i64 noundef %123) #7
  %125 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %116, i64 noundef %123) #7
  %126 = tail call noundef zeroext i1 @_ZNK3HIR7TypeRefneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef nonnull align 8 dereferenceable(8) %125)
  br i1 %126, label %.thread332, label %119

._crit_edge:                                      ; preds = %119, %.preheader353
  %127 = getelementptr inbounds i8, ptr %103, i64 112
  %128 = getelementptr inbounds i8, ptr %104, i64 112
  br label %tailrecurse.backedge

.split448:                                        ; preds = %.preheader355
  %129 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %130 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %131 = load ptr, ptr %129, align 8, !tbaa !56
  %132 = load ptr, ptr %130, align 8, !tbaa !56
  %.not306 = icmp eq ptr %131, %132
  br label %.thread332

.split452:                                        ; preds = %.preheader355
  %133 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %12)
  %134 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %13)
  %135 = load ptr, ptr %133, align 8, !tbaa !58
  %136 = load ptr, ptr %134, align 8, !tbaa !58
  %137 = icmp eq ptr %135, %136
  br label %.thread332

.thread326:                                       ; preds = %.preheader355
  %138 = tail call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.24, ptr %138, align 16, !tbaa !60
  tail call void @__cxa_throw(ptr nonnull %138, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

.thread332.loopexit:                              ; preds = %.lr.ph479, %46
  %.56.ph = xor i1 %53, true
  br label %.thread332

.thread332.loopexit483:                           ; preds = %.lr.ph473, %76
  %.56.ph484 = xor i1 %83, true
  br label %.thread332

.thread332:                                       ; preds = %tailrecurse.backedge, %.lr.ph460, %7, %113, %109, %.split444, %.split436, %.split432, %.lr.ph, %.thread332.loopexit483, %.thread332.loopexit, %.split457, %.preheader350, %.preheader, %.split452, %.split448, %.split440, %.split416, %.split408, %.split404, %.split400, %.split396, %.split393, %.split420, %62, %.split412, %40, %.split428
  %.56 = phi i1 [ %137, %.split452 ], [ %.not306, %.split448 ], [ %102, %.split440 ], [ %58, %.split416 ], [ %36, %.split408 ], [ %29, %.split404 ], [ %26, %.split400 ], [ true, %.split396 ], [ %19, %.split393 ], [ false, %.split420 ], [ %not., %62 ], [ false, %.split412 ], [ false, %40 ], [ false, %.split428 ], [ true, %.preheader ], [ true, %.preheader350 ], [ true, %.split457 ], [ %.56.ph, %.thread332.loopexit ], [ %.56.ph484, %.thread332.loopexit483 ], [ false, %.lr.ph ], [ true, %tailrecurse.backedge ], [ false, %.lr.ph460 ], [ false, %7 ], [ false, %113 ], [ false, %109 ], [ false, %.split444 ], [ false, %.split436 ], [ false, %.split432 ]
  ret i1 %.56
}

declare noundef zeroext i1 @_ZNK3HIR4PatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #4

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZeqRKN3HIR25TypeData_ErasedType_InnerES2_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #5

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

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

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

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

attributes #0 = { 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 #1 = { 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 #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { "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 = { noreturn nounwind }
attributes #7 = { 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, !7, i64 0}
!6 = !{!"_ZTSN3HIR7TypeRefE", !7, i64 0}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!13, !14, i64 0}
!13 = !{!"_ZTSN3HIR8TypeData10Data_InferE", !14, i64 0, !15, i64 4}
!14 = !{!"int", !8, i64 0}
!15 = !{!"_ZTSN3HIR10InferClassE", !8, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"_ZTSN3HIR8CoreTypeE", !8, i64 0}
!18 = !{!19, !14, i64 8}
!19 = !{!"_ZTSN3HIR10GenericRefE", !20, i64 0, !14, i64 8}
!20 = !{!"_ZTS8RcString", !7, i64 0}
!21 = distinct !{!21, !11}
!22 = distinct !{!22, !11}
!23 = !{!24, !26, i64 4}
!24 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !25, i64 0, !26, i64 4, !6, i64 8}
!25 = !{!"_ZTSN3HIR11LifetimeRefE", !14, i64 0}
!26 = !{!"_ZTSN3HIR10BorrowTypeE", !8, i64 0}
!27 = !{!28, !26, i64 0}
!28 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !26, i64 0, !6, i64 8}
!29 = !{!30, !48, i64 96}
!30 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !31, i64 0, !48, i64 96, !48, i64 97, !20, i64 104, !6, i64 112, !49, i64 120}
!31 = !{!"_ZTSN3HIR13GenericParamsE", !32, i64 0, !36, i64 24, !40, i64 48, !44, i64 72}
!32 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!36 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!40 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!44 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !45, i64 0}
!45 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!48 = !{!"bool", !8, i64 0}
!49 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !50, i64 0}
!50 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!53 = !{i8 0, i8 2}
!54 = !{}
!55 = distinct !{!55, !11}
!56 = !{!57, !7, i64 0}
!57 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !7, i64 0}
!58 = !{!59, !7, i64 0}
!59 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !7, i64 0}
!60 = !{!7, !7, i64 0}


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