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

; 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::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.29" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.26, %class.ThinVector.27, %class.ThinVector.28 }
%class.ThinVector.26 = type { ptr }
%class.ThinVector.27 = type { ptr }
%class.ThinVector.28 = type { ptr }
%"class.std::unique_ptr.29" = type { %"struct.std::__uniq_ptr_data.30" }
%"struct.std::__uniq_ptr_data.30" = type { %"class.std::__uniq_ptr_impl.31" }
%"class.std::__uniq_ptr_impl.31" = type { %"class.std::tuple.32" }
%"class.std::tuple.32" = type { %"struct.std::_Tuple_impl.33" }
%"struct.std::_Tuple_impl.33" = type { %"struct.std::_Head_base.36" }
%"struct.std::_Head_base.36" = type { ptr }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.199 = type { i8 }
%class.anon.201 = type { i8 }
%"struct.HIR::TypeData::Data_Infer" = type { i32, i32 }
%"struct.HIR::GenericRef" = type <{ %class.RcString, i32, [4 x i8] }>
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.29" }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::LifetimeRef" = type { i32 }
%"struct.HIR::TypeData::Data_Pointer" = type { i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"class.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr.16", [8 x i8] }
%"class.std::unique_ptr.16" = type { %"struct.std::__uniq_ptr_data.17" }
%"struct.std::__uniq_ptr_data.17" = type { %"class.std::__uniq_ptr_impl.18" }
%"class.std::__uniq_ptr_impl.18" = type { %"class.std::tuple.19" }
%"class.std::tuple.19" = type { %"struct.std::_Tuple_impl.20" }
%"struct.std::_Tuple_impl.20" = type { %"struct.std::_Head_base.23" }
%"struct.std::_Head_base.23" = type { ptr }
%"struct.HIR::TypeData::Data_Closure" = type { ptr }
%"struct.HIR::TypeData::Data_Generator" = type { ptr }
%"struct.HIR::TypeData::Data_NamedFunction" = type { %"class.HIR::Path", %"class.HIR::TypeData_NamedFunction_Ty" }
%"class.HIR::TypeData_NamedFunction_Ty" = type { i32, %"union.HIR::TypeData_NamedFunction_Ty::DataUnion" }
%"union.HIR::TypeData_NamedFunction_Ty::DataUnion" = type { %"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" }
%"struct.HIR::TypeData_NamedFunction_Ty::Data_EnumConstructor" = type { ptr, i64 }
%"struct.HIR::TypeData_FunctionPointer" = type { %"class.HIR::GenericParams", i8, i8, %class.RcString, %"class.HIR::TypeRef", %"class.std::vector.60" }
%"class.HIR::GenericParams" = type { %"class.std::vector.65", %"class.std::vector.70", %"class.std::vector.75", %"class.std::vector.80" }
%"class.std::vector.65" = type { %"struct.std::_Vector_base.66" }
%"struct.std::_Vector_base.66" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.70" = type { %"struct.std::_Vector_base.71" }
%"struct.std::_Vector_base.71" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.75" = type { %"struct.std::_Vector_base.76" }
%"struct.std::_Vector_base.76" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.80" = type { %"struct.std::_Vector_base.81" }
%"struct.std::_Vector_base.81" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.60" = type { %"struct.std::_Vector_base.61" }
%"struct.std::_Vector_base.61" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData_TraitObject" = type <{ %"class.HIR::TraitPath", %"class.std::vector.45", %"struct.HIR::LifetimeRef", [4 x i8] }>
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr.29", %"class.HIR::GenericPath", %"class.std::map", %"class.std::map.40", ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.40" = type { %"class.std::_Rb_tree.41" }
%"class.std::_Rb_tree.41" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyBound>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyBound>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericPath, std::allocator<HIR::GenericPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.50", %"class.std::vector.55", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.50" = type { %"struct.std::_Vector_base.51" }
%"struct.std::_Vector_base.51" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.55" = type { %"struct.std::_Vector_base.56" }
%"struct.std::_Vector_base.56" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn" = type <{ %"class.HIR::Path", i32, [4 x i8] }>

@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_ = external hidden unnamed_addr constant [89 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

declare void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #4

; Function Attrs: nounwind
declare void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5

declare ptr @__cxa_allocate_exception(i64)

declare void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #4

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(8)) #6 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 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 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 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(112) ptr @_ZNK3HIR8TypeData7as_PathEv(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(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(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 @_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 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(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184)) #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)) #3 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104)) #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 uwtable
declare dso_local noundef zeroext i1 @_ZNK16HMTypeInferrence16pathparams_equalERKN3HIR10PathParamsES3_(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) #6 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i8, align 1
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca i8, align 1
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca %"class.HIR::Path", align 8
  %51 = alloca %"struct.HIR::SimplePath", align 8
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca %struct.Span, align 8
  %55 = alloca %"class.std::function", align 8
  %56 = alloca %class.anon.199, align 1
  %57 = alloca %"class.HIR::Path", align 8
  %58 = alloca %"struct.HIR::SimplePath", align 8
  %59 = alloca %struct.Span, align 8
  %60 = alloca %"class.std::function", align 8
  %61 = alloca %class.anon.201, align 1
  %62 = alloca i8, align 1
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca i8, align 1
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  %70 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %71 = load ptr, ptr %6, align 8, !tbaa !5
  %72 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %71)
  store ptr %72, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %73)
  store ptr %74, ptr %9, align 8, !tbaa !5
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %75)
  %77 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %76)
  %78 = load ptr, ptr %9, align 8, !tbaa !5
  %79 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %78)
  %80 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %79)
  %81 = icmp ne i32 %77, %80
  br i1 %81, label %82, label %83

82:                                               ; preds = %3
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %630

83:                                               ; preds = %3
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %84)
  %86 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %85)
  switch i32 %86, label %628 [
    i32 0, label %87
    i32 1, label %88
    i32 3, label %104
    i32 2, label %118
    i32 5, label %127
    i32 4, label %143
    i32 11, label %157
    i32 12, label %181
    i32 9, label %205
    i32 8, label %219
    i32 15, label %241
    i32 16, label %257
    i32 13, label %273
    i32 14, label %287
    i32 6, label %328
    i32 7, label %409
    i32 10, label %616
  ]

87:                                               ; preds = %83
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 1218, ptr noundef @__PRETTY_FUNCTION__._ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_) #8
  unreachable

88:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %89)
  %91 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %90)
  store ptr %91, ptr %11, align 8, !tbaa !5
  %92 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %93)
  %95 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %94)
  store ptr %95, ptr %12, align 8, !tbaa !5
  %96 = load ptr, ptr %12, align 8, !tbaa !5
  %97 = load ptr, ptr %11, align 8, !tbaa !5
  %98 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %97, i32 0, i32 0
  %99 = load i32, ptr %98, align 4, !tbaa !9
  %100 = load ptr, ptr %12, align 8, !tbaa !5
  %101 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %100, i32 0, i32 0
  %102 = load i32, ptr %101, align 4, !tbaa !9
  %103 = icmp eq i32 %99, %102
  store i1 %103, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %630

104:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %105 = load ptr, ptr %8, align 8, !tbaa !5
  %106 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %105)
  %107 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %106)
  store ptr %107, ptr %13, align 8, !tbaa !5
  %108 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %109 = load ptr, ptr %9, align 8, !tbaa !5
  %110 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %109)
  %111 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %110)
  store ptr %111, ptr %14, align 8, !tbaa !5
  %112 = load ptr, ptr %14, align 8, !tbaa !5
  %113 = load ptr, ptr %13, align 8, !tbaa !5
  %114 = load i32, ptr %113, align 4, !tbaa !13
  %115 = load ptr, ptr %14, align 8, !tbaa !5
  %116 = load i32, ptr %115, align 4, !tbaa !13
  %117 = icmp eq i32 %114, %116
  store i1 %117, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %630

118:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %119 = load ptr, ptr %8, align 8, !tbaa !5
  %120 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %119)
  %121 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %120)
  store ptr %121, ptr %15, align 8, !tbaa !5
  %122 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %123 = load ptr, ptr %9, align 8, !tbaa !5
  %124 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %123)
  %125 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %124)
  store ptr %125, ptr %16, align 8, !tbaa !5
  %126 = load ptr, ptr %16, align 8, !tbaa !5
  store i1 true, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %630

127:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %128 = load ptr, ptr %8, align 8, !tbaa !5
  %129 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %128)
  %130 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %129)
  store ptr %130, ptr %17, align 8, !tbaa !5
  %131 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %132)
  %134 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  store ptr %134, ptr %18, align 8, !tbaa !5
  %135 = load ptr, ptr %18, align 8, !tbaa !5
  %136 = load ptr, ptr %17, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %136, i32 0, i32 1
  %138 = load i32, ptr %137, align 8, !tbaa !15
  %139 = load ptr, ptr %18, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %139, i32 0, i32 1
  %141 = load i32, ptr %140, align 8, !tbaa !15
  %142 = icmp eq i32 %138, %141
  store i1 %142, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  br label %630

143:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %144 = load ptr, ptr %8, align 8, !tbaa !5
  %145 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %144)
  %146 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %145)
  store ptr %146, ptr %19, align 8, !tbaa !5
  %147 = load ptr, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %148 = load ptr, ptr %9, align 8, !tbaa !5
  %149 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %148)
  %150 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %149)
  store ptr %150, ptr %20, align 8, !tbaa !5
  %151 = load ptr, ptr %20, align 8, !tbaa !5
  %152 = load ptr, ptr %19, align 8, !tbaa !5
  %153 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %152, i32 0, i32 0
  %154 = load ptr, ptr %20, align 8, !tbaa !5
  %155 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %154, i32 0, i32 0
  %156 = call noundef zeroext i1 @_ZZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_EN1H12compare_pathERKS_RKNS0_4PathES9_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(88) %153, ptr noundef nonnull align 8 dereferenceable(88) %155)
  store i1 %156, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %630

157:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %158 = load ptr, ptr %8, align 8, !tbaa !5
  %159 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %158)
  %160 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %159)
  store ptr %160, ptr %21, align 8, !tbaa !5
  %161 = load ptr, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %162 = load ptr, ptr %9, align 8, !tbaa !5
  %163 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %162)
  %164 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %163)
  store ptr %164, ptr %22, align 8, !tbaa !5
  %165 = load ptr, ptr %22, align 8, !tbaa !5
  %166 = load ptr, ptr %21, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %166, i32 0, i32 1
  %168 = load i32, ptr %167, align 4, !tbaa !18
  %169 = load ptr, ptr %22, align 8, !tbaa !5
  %170 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %169, i32 0, i32 1
  %171 = load i32, ptr %170, align 4, !tbaa !18
  %172 = icmp ne i32 %168, %171
  br i1 %172, label %173, label %174

173:                                              ; preds = %157
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %180

174:                                              ; preds = %157
  %175 = load ptr, ptr %21, align 8, !tbaa !5
  %176 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %175, i32 0, i32 2
  %177 = load ptr, ptr %22, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %177, i32 0, i32 2
  %179 = call noundef zeroext i1 @_ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %176, ptr noundef nonnull align 8 dereferenceable(8) %178)
  store i1 %179, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %180

180:                                              ; preds = %174, %173
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  br label %630

181:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %182)
  %184 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %183)
  store ptr %184, ptr %23, align 8, !tbaa !5
  %185 = load ptr, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %186 = load ptr, ptr %9, align 8, !tbaa !5
  %187 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %186)
  %188 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %187)
  store ptr %188, ptr %24, align 8, !tbaa !5
  %189 = load ptr, ptr %24, align 8, !tbaa !5
  %190 = load ptr, ptr %23, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %190, i32 0, i32 0
  %192 = load i32, ptr %191, align 8, !tbaa !23
  %193 = load ptr, ptr %24, align 8, !tbaa !5
  %194 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %193, i32 0, i32 0
  %195 = load i32, ptr %194, align 8, !tbaa !23
  %196 = icmp ne i32 %192, %195
  br i1 %196, label %197, label %198

197:                                              ; preds = %181
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %204

198:                                              ; preds = %181
  %199 = load ptr, ptr %23, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %199, i32 0, i32 1
  %201 = load ptr, ptr %24, align 8, !tbaa !5
  %202 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %201, i32 0, i32 1
  %203 = call noundef zeroext i1 @_ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %200, ptr noundef nonnull align 8 dereferenceable(8) %202)
  store i1 %203, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %204

204:                                              ; preds = %198, %197
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %630

205:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %206 = load ptr, ptr %8, align 8, !tbaa !5
  %207 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %206)
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %207)
  store ptr %208, ptr %25, align 8, !tbaa !5
  %209 = load ptr, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %210)
  %212 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %211)
  store ptr %212, ptr %26, align 8, !tbaa !5
  %213 = load ptr, ptr %26, align 8, !tbaa !5
  %214 = load ptr, ptr %25, align 8, !tbaa !5
  %215 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %214, i32 0, i32 0
  %216 = load ptr, ptr %26, align 8, !tbaa !5
  %217 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %216, i32 0, i32 0
  %218 = call noundef zeroext i1 @_ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %215, ptr noundef nonnull align 8 dereferenceable(8) %217)
  store i1 %218, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %630

219:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %220 = load ptr, ptr %8, align 8, !tbaa !5
  %221 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %220)
  %222 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %221)
  store ptr %222, ptr %27, align 8, !tbaa !5
  %223 = load ptr, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %224 = load ptr, ptr %9, align 8, !tbaa !5
  %225 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %224)
  %226 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %225)
  store ptr %226, ptr %28, align 8, !tbaa !5
  %227 = load ptr, ptr %28, align 8, !tbaa !5
  %228 = load ptr, ptr %27, align 8, !tbaa !5
  %229 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %228, i32 0, i32 1
  %230 = load ptr, ptr %28, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %230, i32 0, i32 1
  %232 = call noundef zeroext i1 @_ZNK3HIR9ArraySizeneERKS0_(ptr noundef nonnull align 8 dereferenceable(32) %229, ptr noundef nonnull align 8 dereferenceable(32) %231)
  br i1 %232, label %233, label %234

233:                                              ; preds = %219
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %240

234:                                              ; preds = %219
  %235 = load ptr, ptr %27, align 8, !tbaa !5
  %236 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %235, i32 0, i32 0
  %237 = load ptr, ptr %28, align 8, !tbaa !5
  %238 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %237, i32 0, i32 0
  %239 = call noundef zeroext i1 @_ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %236, ptr noundef nonnull align 8 dereferenceable(8) %238)
  store i1 %239, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %240

240:                                              ; preds = %234, %233
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %630

241:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %242 = load ptr, ptr %8, align 8, !tbaa !5
  %243 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %242)
  %244 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %243)
  store ptr %244, ptr %29, align 8, !tbaa !5
  %245 = load ptr, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %246 = load ptr, ptr %9, align 8, !tbaa !5
  %247 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %246)
  %248 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %247)
  store ptr %248, ptr %30, align 8, !tbaa !5
  %249 = load ptr, ptr %30, align 8, !tbaa !5
  %250 = load ptr, ptr %29, align 8, !tbaa !5
  %251 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %250, i32 0, i32 0
  %252 = load ptr, ptr %251, align 8, !tbaa !25
  %253 = load ptr, ptr %30, align 8, !tbaa !5
  %254 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %253, i32 0, i32 0
  %255 = load ptr, ptr %254, align 8, !tbaa !25
  %256 = icmp eq ptr %252, %255
  store i1 %256, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  br label %630

257:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %258 = load ptr, ptr %8, align 8, !tbaa !5
  %259 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %258)
  %260 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %259)
  store ptr %260, ptr %31, align 8, !tbaa !5
  %261 = load ptr, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %262 = load ptr, ptr %9, align 8, !tbaa !5
  %263 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %262)
  %264 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %263)
  store ptr %264, ptr %32, align 8, !tbaa !5
  %265 = load ptr, ptr %32, align 8, !tbaa !5
  %266 = load ptr, ptr %31, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %266, i32 0, i32 0
  %268 = load ptr, ptr %267, align 8, !tbaa !27
  %269 = load ptr, ptr %32, align 8, !tbaa !5
  %270 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %269, i32 0, i32 0
  %271 = load ptr, ptr %270, align 8, !tbaa !27
  %272 = icmp eq ptr %268, %271
  store i1 %272, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  br label %630

273:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %274)
  %276 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %275)
  store ptr %276, ptr %33, align 8, !tbaa !5
  %277 = load ptr, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %278 = load ptr, ptr %9, align 8, !tbaa !5
  %279 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %278)
  %280 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %279)
  store ptr %280, ptr %34, align 8, !tbaa !5
  %281 = load ptr, ptr %34, align 8, !tbaa !5
  %282 = load ptr, ptr %33, align 8, !tbaa !5
  %283 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %282, i32 0, i32 0
  %284 = load ptr, ptr %34, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %284, i32 0, i32 0
  %286 = call noundef zeroext i1 @_ZZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_EN1H12compare_pathERKS_RKNS0_4PathES9_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(88) %283, ptr noundef nonnull align 8 dereferenceable(88) %285)
  store i1 %286, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  br label %630

287:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %288 = load ptr, ptr %8, align 8, !tbaa !5
  %289 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %288)
  %290 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %289)
  store ptr %290, ptr %35, align 8, !tbaa !5
  %291 = load ptr, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %292 = load ptr, ptr %9, align 8, !tbaa !5
  %293 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %292)
  %294 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %293)
  store ptr %294, ptr %36, align 8, !tbaa !5
  %295 = load ptr, ptr %36, align 8, !tbaa !5
  %296 = load ptr, ptr %35, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %296, i32 0, i32 1
  %298 = load i8, ptr %297, align 8, !tbaa !29, !range !53, !noundef !54
  %299 = trunc i8 %298 to i1
  %300 = zext i1 %299 to i32
  %301 = load ptr, ptr %36, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %301, i32 0, i32 1
  %303 = load i8, ptr %302, align 8, !tbaa !29, !range !53, !noundef !54
  %304 = trunc i8 %303 to i1
  %305 = zext i1 %304 to i32
  %306 = icmp ne i32 %300, %305
  br i1 %306, label %313, label %307

307:                                              ; preds = %287
  %308 = load ptr, ptr %35, align 8, !tbaa !5
  %309 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %308, i32 0, i32 3
  %310 = load ptr, ptr %36, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %310, i32 0, i32 3
  %312 = call noundef zeroext i1 @_ZNK8RcStringneERKS_(ptr noundef nonnull align 8 dereferenceable(8) %309, ptr noundef nonnull align 8 dereferenceable(8) %311)
  br i1 %312, label %313, label %314

313:                                              ; preds = %307, %287
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %327

314:                                              ; preds = %307
  %315 = load ptr, ptr %35, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %315, i32 0, i32 5
  %317 = load ptr, ptr %36, align 8, !tbaa !5
  %318 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %317, i32 0, i32 5
  %319 = call noundef zeroext i1 @_ZN12_GLOBAL__N_115type_list_equalERK16HMTypeInferrenceRKSt6vectorIN3HIR7TypeRefESaIS5_EES9_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(24) %316, ptr noundef nonnull align 8 dereferenceable(24) %318)
  br i1 %319, label %321, label %320

320:                                              ; preds = %314
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %327

321:                                              ; preds = %314
  %322 = load ptr, ptr %35, align 8, !tbaa !5
  %323 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %322, i32 0, i32 4
  %324 = load ptr, ptr %36, align 8, !tbaa !5
  %325 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %324, i32 0, i32 4
  %326 = call noundef zeroext i1 @_ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %323, ptr noundef nonnull align 8 dereferenceable(8) %325)
  store i1 %326, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %327

327:                                              ; preds = %321, %320, %313
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %630

328:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %329 = load ptr, ptr %8, align 8, !tbaa !5
  %330 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %329)
  %331 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %330)
  store ptr %331, ptr %37, align 8, !tbaa !5
  %332 = load ptr, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %333 = load ptr, ptr %9, align 8, !tbaa !5
  %334 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %333)
  %335 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %334)
  store ptr %335, ptr %38, align 8, !tbaa !5
  %336 = load ptr, ptr %38, align 8, !tbaa !5
  %337 = load ptr, ptr %37, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %337, i32 0, i32 1
  %339 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %338) #7
  %340 = load ptr, ptr %38, align 8, !tbaa !5
  %341 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %340, i32 0, i32 1
  %342 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %341) #7
  %343 = icmp ne i64 %339, %342
  br i1 %343, label %344, label %345

344:                                              ; preds = %328
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %408

345:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  store i32 0, ptr %39, align 4, !tbaa !55
  br label %346

346:                                              ; preds = %382, %345
  %347 = load i32, ptr %39, align 4, !tbaa !55
  %348 = zext i32 %347 to i64
  %349 = load ptr, ptr %37, align 8, !tbaa !5
  %350 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %349, i32 0, i32 1
  %351 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %350) #7
  %352 = icmp ult i64 %348, %351
  br i1 %352, label %354, label %353

353:                                              ; preds = %346
  store i32 3, ptr %10, align 4
  br label %385

354:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %355 = load ptr, ptr %37, align 8, !tbaa !5
  %356 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %355, i32 0, i32 1
  %357 = load i32, ptr %39, align 4, !tbaa !55
  %358 = zext i32 %357 to i64
  %359 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %356, i64 noundef %358) #7
  store ptr %359, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %360 = load ptr, ptr %38, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %360, i32 0, i32 1
  %362 = load i32, ptr %39, align 4, !tbaa !55
  %363 = zext i32 %362 to i64
  %364 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %361, i64 noundef %363) #7
  store ptr %364, ptr %41, align 8, !tbaa !5
  %365 = load ptr, ptr %40, align 8, !tbaa !5
  %366 = getelementptr inbounds %"class.HIR::GenericPath", ptr %365, i32 0, i32 0
  %367 = load ptr, ptr %41, align 8, !tbaa !5
  %368 = getelementptr inbounds %"class.HIR::GenericPath", ptr %367, i32 0, i32 0
  %369 = call noundef zeroext i1 @_ZNK3HIR10SimplePathneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %366, ptr noundef nonnull align 8 dereferenceable(8) %368)
  br i1 %369, label %370, label %371

370:                                              ; preds = %354
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %379

371:                                              ; preds = %354
  %372 = load ptr, ptr %40, align 8, !tbaa !5
  %373 = getelementptr inbounds %"class.HIR::GenericPath", ptr %372, i32 0, i32 1
  %374 = load ptr, ptr %41, align 8, !tbaa !5
  %375 = getelementptr inbounds %"class.HIR::GenericPath", ptr %374, i32 0, i32 1
  %376 = call noundef zeroext i1 @_ZNK16HMTypeInferrence16pathparams_equalERKN3HIR10PathParamsES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(24) %373, ptr noundef nonnull align 8 dereferenceable(24) %375)
  br i1 %376, label %378, label %377

377:                                              ; preds = %371
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %379

378:                                              ; preds = %371
  store i32 0, ptr %10, align 4
  br label %379

379:                                              ; preds = %378, %377, %370
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  %380 = load i32, ptr %10, align 4
  switch i32 %380, label %385 [
    i32 0, label %381
  ]

381:                                              ; preds = %379
  br label %382

382:                                              ; preds = %381
  %383 = load i32, ptr %39, align 4, !tbaa !55
  %384 = add i32 %383, 1
  store i32 %384, ptr %39, align 4, !tbaa !55
  br label %346, !llvm.loop !56

385:                                              ; preds = %379, %353
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  %386 = load i32, ptr %10, align 4
  switch i32 %386, label %408 [
    i32 3, label %387
  ]

387:                                              ; preds = %385
  %388 = load ptr, ptr %37, align 8, !tbaa !5
  %389 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %388, i32 0, i32 0
  %390 = getelementptr inbounds %"class.HIR::TraitPath", ptr %389, i32 0, i32 1
  %391 = getelementptr inbounds %"class.HIR::GenericPath", ptr %390, i32 0, i32 0
  %392 = load ptr, ptr %38, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %392, i32 0, i32 0
  %394 = getelementptr inbounds %"class.HIR::TraitPath", ptr %393, i32 0, i32 1
  %395 = getelementptr inbounds %"class.HIR::GenericPath", ptr %394, i32 0, i32 0
  %396 = call noundef zeroext i1 @_ZNK3HIR10SimplePathneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %391, ptr noundef nonnull align 8 dereferenceable(8) %395)
  br i1 %396, label %397, label %398

397:                                              ; preds = %387
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %408

398:                                              ; preds = %387
  %399 = load ptr, ptr %37, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %399, i32 0, i32 0
  %401 = getelementptr inbounds %"class.HIR::TraitPath", ptr %400, i32 0, i32 1
  %402 = getelementptr inbounds %"class.HIR::GenericPath", ptr %401, i32 0, i32 1
  %403 = load ptr, ptr %38, align 8, !tbaa !5
  %404 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %403, i32 0, i32 0
  %405 = getelementptr inbounds %"class.HIR::TraitPath", ptr %404, i32 0, i32 1
  %406 = getelementptr inbounds %"class.HIR::GenericPath", ptr %405, i32 0, i32 1
  %407 = call noundef zeroext i1 @_ZNK16HMTypeInferrence16pathparams_equalERKN3HIR10PathParamsES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(24) %402, ptr noundef nonnull align 8 dereferenceable(24) %406)
  store i1 %407, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %408

408:                                              ; preds = %398, %397, %385, %344
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %630

409:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %410 = load ptr, ptr %8, align 8, !tbaa !5
  %411 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %410)
  %412 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %411)
  store ptr %412, ptr %42, align 8, !tbaa !5
  %413 = load ptr, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %414 = load ptr, ptr %9, align 8, !tbaa !5
  %415 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %414)
  %416 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %415)
  store ptr %416, ptr %43, align 8, !tbaa !5
  %417 = load ptr, ptr %43, align 8, !tbaa !5
  %418 = load ptr, ptr %42, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %418, i32 0, i32 3
  %420 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %419)
  %421 = load ptr, ptr %43, align 8, !tbaa !5
  %422 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %421, i32 0, i32 3
  %423 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %422)
  %424 = icmp ne i32 %420, %423
  br i1 %424, label %425, label %426

425:                                              ; preds = %409
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %613

426:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #7
  store i8 1, ptr %44, align 1, !tbaa !58
  br label %427

427:                                              ; preds = %609, %426
  %428 = load i8, ptr %44, align 1, !tbaa !58, !range !53, !noundef !54
  %429 = trunc i8 %428 to i1
  br i1 %429, label %431, label %430

430:                                              ; preds = %427
  store i32 6, ptr %10, align 4
  br label %610

431:                                              ; preds = %427
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  %432 = load ptr, ptr %42, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %432, i32 0, i32 3
  store ptr %433, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %434 = load ptr, ptr %43, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %434, i32 0, i32 3
  store ptr %435, ptr %46, align 8, !tbaa !5
  br label %436

436:                                              ; preds = %605, %431
  %437 = load i8, ptr %44, align 1, !tbaa !58, !range !53, !noundef !54
  %438 = trunc i8 %437 to i1
  br i1 %438, label %440, label %439

439:                                              ; preds = %436
  store i32 9, ptr %10, align 4
  br label %606

440:                                              ; preds = %436
  %441 = load ptr, ptr %45, align 8, !tbaa !5
  %442 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %441)
  switch i32 %442, label %604 [
    i32 0, label %443
    i32 1, label %444
    i32 2, label %537
    i32 3, label %565
  ]

443:                                              ; preds = %440
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 1199, ptr noundef @__PRETTY_FUNCTION__._ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_) #8
  unreachable

444:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #7
  store i8 1, ptr %47, align 1, !tbaa !58
  br label %445

445:                                              ; preds = %533, %444
  %446 = load i8, ptr %47, align 1, !tbaa !58, !range !53, !noundef !54
  %447 = trunc i8 %446 to i1
  br i1 %447, label %449, label %448

448:                                              ; preds = %445
  store i32 13, ptr %10, align 4
  br label %534

449:                                              ; preds = %445
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  %450 = load ptr, ptr %45, align 8, !tbaa !5
  %451 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %450)
  store ptr %451, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %452 = load ptr, ptr %46, align 8, !tbaa !5
  %453 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %452)
  store ptr %453, ptr %49, align 8, !tbaa !5
  br label %454

454:                                              ; preds = %528, %449
  %455 = load ptr, ptr %48, align 8, !tbaa !5
  %456 = load ptr, ptr %49, align 8, !tbaa !5
  %457 = load i8, ptr %47, align 1, !tbaa !58, !range !53, !noundef !54
  %458 = trunc i8 %457 to i1
  br i1 %458, label %460, label %459

459:                                              ; preds = %454
  store i32 16, ptr %10, align 4
  br label %529

460:                                              ; preds = %454
  br label %461

461:                                              ; preds = %460
  %462 = load ptr, ptr %48, align 8, !tbaa !5
  %463 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %462, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 88, ptr %50) #7
  call void @_ZN3HIR10SimplePathC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %51)
  invoke void @_ZN3HIR4PathC1ENS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(88) %50, ptr noundef %51)
          to label %464 unwind label %472

464:                                              ; preds = %461
  %465 = invoke noundef zeroext i1 @_ZNK3HIR4PathneERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %463, ptr noundef nonnull align 8 dereferenceable(88) %50)
          to label %466 unwind label %476

466:                                              ; preds = %464
  %467 = xor i1 %465, true
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %50) #7
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %51) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr %50) #7
  br i1 %467, label %468, label %489

468:                                              ; preds = %466
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54)
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #7
  call void @"_ZNSt8functionIFvRSoEEC2IZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES8_E3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 1 dereferenceable(1) %56) #7
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef %55)
          to label %469 unwind label %481

469:                                              ; preds = %468
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  %470 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %470, ptr noundef @.str.8)
          to label %471 unwind label %485

471:                                              ; preds = %469
  call void @__cxa_throw(ptr %470, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #9
  unreachable

472:                                              ; preds = %461
  %473 = landingpad { ptr, i32 }
          cleanup
  %474 = extractvalue { ptr, i32 } %473, 0
  store ptr %474, ptr %52, align 8
  %475 = extractvalue { ptr, i32 } %473, 1
  store i32 %475, ptr %53, align 4
  br label %480

476:                                              ; preds = %464
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %52, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %53, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %50) #7
  br label %480

480:                                              ; preds = %476, %472
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %51) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr %50) #7
  br label %531

481:                                              ; preds = %468
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %52, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %53, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  br label %531

485:                                              ; preds = %469
  %486 = landingpad { ptr, i32 }
          cleanup
  %487 = extractvalue { ptr, i32 } %486, 0
  store ptr %487, ptr %52, align 8
  %488 = extractvalue { ptr, i32 } %486, 1
  store i32 %488, ptr %53, align 4
  call void @__cxa_free_exception(ptr %470) #7
  br label %531

489:                                              ; preds = %466
  br label %490

490:                                              ; preds = %489
  br label %491

491:                                              ; preds = %490
  br label %492

492:                                              ; preds = %491
  %493 = load ptr, ptr %49, align 8, !tbaa !5
  %494 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %493, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 88, ptr %57) #7
  call void @_ZN3HIR10SimplePathC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58)
  invoke void @_ZN3HIR4PathC1ENS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(88) %57, ptr noundef %58)
          to label %495 unwind label %503

495:                                              ; preds = %492
  %496 = invoke noundef zeroext i1 @_ZNK3HIR4PathneERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %494, ptr noundef nonnull align 8 dereferenceable(88) %57)
          to label %497 unwind label %507

497:                                              ; preds = %495
  %498 = xor i1 %496, true
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %57) #7
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr %57) #7
  br i1 %498, label %499, label %520

499:                                              ; preds = %497
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %59)
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #7
  call void @"_ZNSt8functionIFvRSoEEC2IZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES8_E3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 1 dereferenceable(1) %61) #7
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef %60)
          to label %500 unwind label %512

500:                                              ; preds = %499
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  %501 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %501, ptr noundef @.str.8)
          to label %502 unwind label %516

502:                                              ; preds = %500
  call void @__cxa_throw(ptr %501, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #9
  unreachable

503:                                              ; preds = %492
  %504 = landingpad { ptr, i32 }
          cleanup
  %505 = extractvalue { ptr, i32 } %504, 0
  store ptr %505, ptr %52, align 8
  %506 = extractvalue { ptr, i32 } %504, 1
  store i32 %506, ptr %53, align 4
  br label %511

507:                                              ; preds = %495
  %508 = landingpad { ptr, i32 }
          cleanup
  %509 = extractvalue { ptr, i32 } %508, 0
  store ptr %509, ptr %52, align 8
  %510 = extractvalue { ptr, i32 } %508, 1
  store i32 %510, ptr %53, align 4
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %57) #7
  br label %511

511:                                              ; preds = %507, %503
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr %57) #7
  br label %531

512:                                              ; preds = %499
  %513 = landingpad { ptr, i32 }
          cleanup
  %514 = extractvalue { ptr, i32 } %513, 0
  store ptr %514, ptr %52, align 8
  %515 = extractvalue { ptr, i32 } %513, 1
  store i32 %515, ptr %53, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  br label %531

516:                                              ; preds = %500
  %517 = landingpad { ptr, i32 }
          cleanup
  %518 = extractvalue { ptr, i32 } %517, 0
  store ptr %518, ptr %52, align 8
  %519 = extractvalue { ptr, i32 } %517, 1
  store i32 %519, ptr %53, align 4
  call void @__cxa_free_exception(ptr %501) #7
  br label %531

520:                                              ; preds = %497
  br label %521

521:                                              ; preds = %520
  br label %522

522:                                              ; preds = %521
  %523 = load ptr, ptr %48, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %523, i32 0, i32 0
  %525 = load ptr, ptr %49, align 8, !tbaa !5
  %526 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %525, i32 0, i32 0
  %527 = call noundef zeroext i1 @_ZZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_EN1H12compare_pathERKS_RKNS0_4PathES9_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(88) %524, ptr noundef nonnull align 8 dereferenceable(88) %526)
  store i1 %527, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %529

528:                                              ; No predecessors!
  store i8 0, ptr %47, align 1, !tbaa !58
  br label %454, !llvm.loop !59

529:                                              ; preds = %522, %459
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  %530 = load i32, ptr %10, align 4
  switch i32 %530, label %534 [
    i32 16, label %532
  ]

531:                                              ; preds = %516, %512, %511, %485, %481, %480
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  br label %632

532:                                              ; preds = %529
  br label %533

533:                                              ; preds = %532
  store i8 0, ptr %47, align 1, !tbaa !58
  br label %445, !llvm.loop !60

534:                                              ; preds = %529, %448
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #7
  %535 = load i32, ptr %10, align 4
  switch i32 %535, label %606 [
    i32 13, label %536
  ]

536:                                              ; preds = %534
  br label %604

537:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #7
  store i8 1, ptr %62, align 1, !tbaa !58
  br label %538

538:                                              ; preds = %561, %537
  %539 = load i8, ptr %62, align 1, !tbaa !58, !range !53, !noundef !54
  %540 = trunc i8 %539 to i1
  br i1 %540, label %542, label %541

541:                                              ; preds = %538
  store i32 23, ptr %10, align 4
  br label %562

542:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %543 = load ptr, ptr %45, align 8, !tbaa !5
  %544 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %543)
  store ptr %544, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #7
  %545 = load ptr, ptr %46, align 8, !tbaa !5
  %546 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %545)
  store ptr %546, ptr %64, align 8, !tbaa !5
  br label %547

547:                                              ; preds = %557, %542
  %548 = load ptr, ptr %63, align 8, !tbaa !5
  %549 = load ptr, ptr %64, align 8, !tbaa !5
  %550 = load i8, ptr %62, align 1, !tbaa !58, !range !53, !noundef !54
  %551 = trunc i8 %550 to i1
  br i1 %551, label %553, label %552

552:                                              ; preds = %547
  store i32 26, ptr %10, align 4
  br label %558

553:                                              ; preds = %547
  %554 = load ptr, ptr %63, align 8, !tbaa !5
  %555 = load ptr, ptr %64, align 8, !tbaa !5
  %556 = call noundef zeroext i1 @_ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(8) %554, ptr noundef nonnull align 8 dereferenceable(8) %555)
  store i1 %556, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %558

557:                                              ; No predecessors!
  store i8 0, ptr %62, align 1, !tbaa !58
  br label %547, !llvm.loop !61

558:                                              ; preds = %553, %552
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  %559 = load i32, ptr %10, align 4
  switch i32 %559, label %562 [
    i32 26, label %560
  ]

560:                                              ; preds = %558
  br label %561

561:                                              ; preds = %560
  store i8 0, ptr %62, align 1, !tbaa !58
  br label %538, !llvm.loop !62

562:                                              ; preds = %558, %541
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #7
  %563 = load i32, ptr %10, align 4
  switch i32 %563, label %606 [
    i32 23, label %564
  ]

564:                                              ; preds = %562
  br label %604

565:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #7
  store i8 1, ptr %65, align 1, !tbaa !58
  br label %566

566:                                              ; preds = %600, %565
  %567 = load i8, ptr %65, align 1, !tbaa !58, !range !53, !noundef !54
  %568 = trunc i8 %567 to i1
  br i1 %568, label %570, label %569

569:                                              ; preds = %566
  store i32 29, ptr %10, align 4
  br label %601

570:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #7
  %571 = load ptr, ptr %45, align 8, !tbaa !5
  %572 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %571)
  store ptr %572, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #7
  %573 = load ptr, ptr %46, align 8, !tbaa !5
  %574 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %573)
  store ptr %574, ptr %67, align 8, !tbaa !5
  br label %575

575:                                              ; preds = %596, %570
  %576 = load ptr, ptr %66, align 8, !tbaa !5
  %577 = load ptr, ptr %67, align 8, !tbaa !5
  %578 = load i8, ptr %65, align 1, !tbaa !58, !range !53, !noundef !54
  %579 = trunc i8 %578 to i1
  br i1 %579, label %581, label %580

580:                                              ; preds = %575
  store i32 32, ptr %10, align 4
  br label %597

581:                                              ; preds = %575
  %582 = load ptr, ptr %66, align 8, !tbaa !5
  %583 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %582, i32 0, i32 1
  %584 = call noundef ptr @_ZNKSt12__shared_ptrIN3HIR30TypeData_ErasedType_AliasInnerELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %583) #7
  %585 = load ptr, ptr %67, align 8, !tbaa !5
  %586 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %585, i32 0, i32 1
  %587 = call noundef ptr @_ZNKSt12__shared_ptrIN3HIR30TypeData_ErasedType_AliasInnerELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %586) #7
  %588 = icmp ne ptr %584, %587
  br i1 %588, label %589, label %590

589:                                              ; preds = %581
  store i1 false, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %597

590:                                              ; preds = %581
  %591 = load ptr, ptr %66, align 8, !tbaa !5
  %592 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %591, i32 0, i32 0
  %593 = load ptr, ptr %67, align 8, !tbaa !5
  %594 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %593, i32 0, i32 0
  %595 = call noundef zeroext i1 @_ZNK16HMTypeInferrence16pathparams_equalERKN3HIR10PathParamsES3_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(24) %592, ptr noundef nonnull align 8 dereferenceable(24) %594)
  store i1 %595, ptr %4, align 1
  store i32 1, ptr %10, align 4
  br label %597

596:                                              ; No predecessors!
  store i8 0, ptr %65, align 1, !tbaa !58
  br label %575, !llvm.loop !63

597:                                              ; preds = %590, %589, %580
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  %598 = load i32, ptr %10, align 4
  switch i32 %598, label %601 [
    i32 32, label %599
  ]

599:                                              ; preds = %597
  br label %600

600:                                              ; preds = %599
  store i8 0, ptr %65, align 1, !tbaa !58
  br label %566, !llvm.loop !64

601:                                              ; preds = %597, %569
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #7
  %602 = load i32, ptr %10, align 4
  switch i32 %602, label %606 [
    i32 29, label %603
  ]

603:                                              ; preds = %601
  br label %604

604:                                              ; preds = %603, %564, %536, %440
  br label %605

605:                                              ; preds = %604
  store i8 0, ptr %44, align 1, !tbaa !58
  br label %436, !llvm.loop !65

606:                                              ; preds = %601, %562, %534, %439
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  %607 = load i32, ptr %10, align 4
  switch i32 %607, label %610 [
    i32 9, label %608
  ]

608:                                              ; preds = %606
  br label %609

609:                                              ; preds = %608
  store i8 0, ptr %44, align 1, !tbaa !58
  br label %427, !llvm.loop !66

610:                                              ; preds = %606, %430
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #7
  %611 = load i32, ptr %10, align 4
  switch i32 %611, label %613 [
    i32 6, label %612
  ]

612:                                              ; preds = %610
  store i32 0, ptr %10, align 4
  br label %613

613:                                              ; preds = %612, %610, %425
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  %614 = load i32, ptr %10, align 4
  switch i32 %614, label %630 [
    i32 0, label %615
  ]

615:                                              ; preds = %613
  br label %628

616:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #7
  %617 = load ptr, ptr %8, align 8, !tbaa !5
  %618 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %617)
  %619 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %618)
  store ptr %619, ptr %68, align 8, !tbaa !5
  %620 = load ptr, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #7
  %621 = load ptr, ptr %9, align 8, !tbaa !5
  %622 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %621)
  %623 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %622)
  store ptr %623, ptr %69, align 8, !tbaa !5
  %624 = load ptr, ptr %69, align 8, !tbaa !5
  %625 = load ptr, ptr %68, align 8, !tbaa !5
  %626 = load ptr, ptr %69, align 8, !tbaa !5
  %627 = call noundef zeroext i1 @_ZN12_GLOBAL__N_115type_list_equalERK16HMTypeInferrenceRKSt6vectorIN3HIR7TypeRefESaIS5_EES9_(ptr noundef nonnull align 8 dereferenceable(49) %70, ptr noundef nonnull align 8 dereferenceable(24) %625, ptr noundef nonnull align 8 dereferenceable(24) %626)
  store i1 %627, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #7
  br label %630

628:                                              ; preds = %615, %83
  %629 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.15, ptr %629, align 16, !tbaa !5
  call void @__cxa_throw(ptr %629, ptr @_ZTIPKc, ptr null) #9
  unreachable

630:                                              ; preds = %616, %613, %408, %327, %273, %257, %241, %240, %205, %204, %180, %143, %127, %118, %104, %88, %82
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  %631 = load i1, ptr %4, align 1
  ret i1 %631

632:                                              ; preds = %531
  %633 = load ptr, ptr %52, align 8
  %634 = load i32, ptr %53, align 4
  %635 = insertvalue { ptr, i32 } poison, ptr %633, 0
  %636 = insertvalue { ptr, i32 } %635, i32 %634, 1
  resume { ptr, i32 } %636
}

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_EN1H12compare_pathERKS_RKNS0_4PathES9_(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) #6 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)) #6 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)) #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_115type_list_equalERK16HMTypeInferrenceRKSt6vectorIN3HIR7TypeRefESaIS5_EES9_(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #6

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

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

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

declare void @_ZN3HIR4PathC1ENS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef) unnamed_addr #4

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress 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, !11, i64 0}
!10 = !{!"_ZTSN3HIR8TypeData10Data_InferE", !11, i64 0, !12, i64 4}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTSN3HIR10InferClassE", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!15 = !{!16, !11, i64 8}
!16 = !{!"_ZTSN3HIR10GenericRefE", !17, i64 0, !11, i64 8}
!17 = !{!"_ZTS8RcString", !6, i64 0}
!18 = !{!19, !21, i64 4}
!19 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !20, i64 0, !21, i64 4, !22, i64 8}
!20 = !{!"_ZTSN3HIR11LifetimeRefE", !11, i64 0}
!21 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!22 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!23 = !{!24, !21, i64 0}
!24 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !21, i64 0, !22, i64 8}
!25 = !{!26, !6, i64 0}
!26 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !6, i64 0}
!27 = !{!28, !6, i64 0}
!28 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !6, i64 0}
!29 = !{!30, !48, i64 96}
!30 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !31, i64 0, !48, i64 96, !48, i64 97, !17, i64 104, !22, 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", !6, i64 0, !6, i64 8, !6, 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", !6, i64 0, !6, i64 8, !6, 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", !6, i64 0, !6, i64 8, !6, 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", !6, i64 0, !6, i64 8, !6, i64 16}
!48 = !{!"bool", !7, 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", !6, i64 0, !6, i64 8, !6, i64 16}
!53 = !{i8 0, i8 2}
!54 = !{}
!55 = !{!11, !11, i64 0}
!56 = distinct !{!56, !57}
!57 = !{!"llvm.loop.mustprogress"}
!58 = !{!48, !48, i64 0}
!59 = distinct !{!59, !57}
!60 = distinct !{!60, !57}
!61 = distinct !{!61, !57}
!62 = distinct !{!62, !57}
!63 = distinct !{!63, !57}
!64 = distinct !{!64, !57}
!65 = distinct !{!65, !57}
!66 = distinct !{!66, !57}


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

%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.29" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.26, %class.ThinVector.27, %class.ThinVector.28 }
%class.ThinVector.26 = type { ptr }
%class.ThinVector.27 = type { ptr }
%class.ThinVector.28 = type { ptr }
%"class.std::unique_ptr.29" = type { %"struct.std::__uniq_ptr_data.30" }
%"struct.std::__uniq_ptr_data.30" = type { %"class.std::__uniq_ptr_impl.31" }
%"class.std::__uniq_ptr_impl.31" = type { %"class.std::tuple.32" }
%"class.std::tuple.32" = type { %"struct.std::_Tuple_impl.33" }
%"struct.std::_Tuple_impl.33" = type { %"struct.std::_Head_base.36" }
%"struct.std::_Head_base.36" = type { ptr }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.199 = type { i8 }
%class.anon.201 = type { i8 }

@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_ = external hidden unnamed_addr constant [89 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

declare void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind
declare void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #4

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) local_unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.HIR::Path", align 8
  %5 = alloca %"struct.HIR::SimplePath", align 8
  %6 = alloca %struct.Span, align 8
  %7 = alloca %"class.std::function", align 8
  %8 = alloca %class.anon.199, align 1
  %9 = alloca %"class.HIR::Path", align 8
  %10 = alloca %"struct.HIR::SimplePath", align 8
  %11 = alloca %struct.Span, align 8
  %12 = alloca %"class.std::function", align 8
  %13 = alloca %class.anon.201, align 1
  br label %tailrecurse

tailrecurse:                                      ; preds = %.split274.us, %3
  %.tr427 = phi ptr [ %1, %3 ], [ %222, %.split274.us ]
  %.tr428 = phi ptr [ %2, %3 ], [ %223, %.split274.us ]
  %14 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %.tr427)
  %15 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %.tr428)
  %16 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %17 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  %18 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %19 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %18)
  %.not264 = icmp eq i32 %17, %19
  br i1 %.not264, label %.lr.ph, label %.critedge

.lr.ph:                                           ; preds = %tailrecurse, %tailrecurse.backedge
  %20 = phi ptr [ %75, %tailrecurse.backedge ], [ %15, %tailrecurse ]
  %21 = phi ptr [ %74, %tailrecurse.backedge ], [ %14, %tailrecurse ]
  %22 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %23 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %22)
  switch i32 %23, label %.thread224 [
    i32 0, label %24
    i32 1, label %25
    i32 3, label %33
    i32 2, label %41
    i32 5, label %46
    i32 4, label %56
    i32 11, label %62
    i32 12, label %80
    i32 9, label %90
    i32 8, label %95
    i32 15, label %103
    i32 16, label %111
    i32 13, label %119
    i32 14, label %125
    i32 6, label %145
    i32 7, label %174
    i32 10, label %232
  ]

24:                                               ; preds = %.lr.ph
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 1218, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_) #7
  unreachable

25:                                               ; preds = %.lr.ph
  %26 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %27 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %26)
  %28 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %29 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %28)
  %30 = load i32, ptr %27, align 4, !tbaa !5
  %31 = load i32, ptr %29, align 4, !tbaa !5
  %32 = icmp eq i32 %30, %31
  br label %.critedge

33:                                               ; preds = %.lr.ph
  %34 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %35 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %34)
  %36 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %37 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %36)
  %38 = load i32, ptr %35, align 4, !tbaa !11
  %39 = load i32, ptr %37, align 4, !tbaa !11
  %40 = icmp eq i32 %38, %39
  br label %.critedge

41:                                               ; preds = %.lr.ph
  %42 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %43 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %42)
  %44 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %45 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %44)
  br label %.critedge

46:                                               ; preds = %.lr.ph
  %47 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %48 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %49 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %50 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %49)
  %51 = getelementptr inbounds i8, ptr %48, i64 8
  %52 = load i32, ptr %51, align 8, !tbaa !13
  %53 = getelementptr inbounds i8, ptr %50, i64 8
  %54 = load i32, ptr %53, align 8, !tbaa !13
  %55 = icmp eq i32 %52, %54
  br label %.critedge

56:                                               ; preds = %.lr.ph
  %57 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %58 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %57)
  %59 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %60 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %59)
  %61 = tail call noundef zeroext i1 @_ZZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_EN1H12compare_pathERKS_RKNS0_4PathES9_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(88) %58, ptr noundef nonnull align 8 dereferenceable(88) %60)
  br label %.critedge

62:                                               ; preds = %.lr.ph
  %63 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %64 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %63)
  %65 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %66 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %65)
  %67 = getelementptr inbounds i8, ptr %64, i64 4
  %68 = load i32, ptr %67, align 4, !tbaa !17
  %69 = getelementptr inbounds i8, ptr %66, i64 4
  %70 = load i32, ptr %69, align 4, !tbaa !17
  %.not218 = icmp eq i32 %68, %70
  br i1 %.not218, label %71, label %.critedge

71:                                               ; preds = %62
  %72 = getelementptr inbounds i8, ptr %64, i64 8
  %73 = getelementptr inbounds i8, ptr %66, i64 8
  br label %tailrecurse.backedge

tailrecurse.backedge:                             ; preds = %71, %87, %90, %142, %95
  %.tr227.be = phi ptr [ %72, %71 ], [ %88, %87 ], [ %92, %90 ], [ %143, %142 ], [ %97, %95 ]
  %.tr228.be = phi ptr [ %73, %71 ], [ %89, %87 ], [ %94, %90 ], [ %144, %142 ], [ %99, %95 ]
  %74 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %.tr227.be)
  %75 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK16HMTypeInferrence8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(8) %.tr228.be)
  %76 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %74)
  %77 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %76)
  %78 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %75)
  %79 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %78)
  %.not = icmp eq i32 %77, %79
  br i1 %.not, label %.lr.ph, label %.critedge

80:                                               ; preds = %.lr.ph
  %81 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %82 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %81)
  %83 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %84 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %83)
  %85 = load i32, ptr %82, align 8, !tbaa !22
  %86 = load i32, ptr %84, align 8, !tbaa !22
  %.not217 = icmp eq i32 %85, %86
  br i1 %.not217, label %87, label %.critedge

87:                                               ; preds = %80
  %88 = getelementptr inbounds i8, ptr %82, i64 8
  %89 = getelementptr inbounds i8, ptr %84, i64 8
  br label %tailrecurse.backedge

90:                                               ; preds = %.lr.ph
  %91 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %92 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %91)
  %93 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %94 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %93)
  br label %tailrecurse.backedge

95:                                               ; preds = %.lr.ph
  %96 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %97 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %96)
  %98 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %99 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %98)
  %100 = getelementptr inbounds i8, ptr %97, i64 8
  %101 = getelementptr inbounds i8, ptr %99, i64 8
  %102 = tail call noundef zeroext i1 @_ZNK3HIR9ArraySizeneERKS0_(ptr noundef nonnull align 8 dereferenceable(32) %100, ptr noundef nonnull align 8 dereferenceable(32) %101)
  br i1 %102, label %.critedge, label %tailrecurse.backedge

103:                                              ; preds = %.lr.ph
  %104 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %105 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %104)
  %106 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %107 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %106)
  %108 = load ptr, ptr %105, align 8, !tbaa !24
  %109 = load ptr, ptr %107, align 8, !tbaa !24
  %110 = icmp eq ptr %108, %109
  br label %.critedge

111:                                              ; preds = %.lr.ph
  %112 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %113 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %112)
  %114 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %115 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %114)
  %116 = load ptr, ptr %113, align 8, !tbaa !26
  %117 = load ptr, ptr %115, align 8, !tbaa !26
  %118 = icmp eq ptr %116, %117
  br label %.critedge

119:                                              ; preds = %.lr.ph
  %120 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %121 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %120)
  %122 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %123 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %122)
  %124 = tail call noundef zeroext i1 @_ZZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_EN1H12compare_pathERKS_RKNS0_4PathES9_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(88) %121, ptr noundef nonnull align 8 dereferenceable(88) %123)
  br label %.critedge

125:                                              ; preds = %.lr.ph
  %126 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %127 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %126)
  %128 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %129 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %128)
  %130 = getelementptr inbounds i8, ptr %127, i64 96
  %131 = load i8, ptr %130, align 8, !tbaa !28, !range !52, !noundef !53
  %132 = getelementptr inbounds i8, ptr %129, i64 96
  %133 = load i8, ptr %132, align 8, !tbaa !28, !range !52, !noundef !53
  %.not216 = icmp eq i8 %131, %133
  br i1 %.not216, label %134, label %.critedge

134:                                              ; preds = %125
  %135 = getelementptr inbounds i8, ptr %127, i64 104
  %136 = getelementptr inbounds i8, ptr %129, i64 104
  %137 = tail call noundef zeroext i1 @_ZNK8RcStringneERKS_(ptr noundef nonnull align 8 dereferenceable(8) %135, ptr noundef nonnull align 8 dereferenceable(8) %136)
  br i1 %137, label %.critedge, label %138

138:                                              ; preds = %134
  %139 = getelementptr inbounds i8, ptr %127, i64 120
  %140 = getelementptr inbounds i8, ptr %129, i64 120
  %141 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_115type_list_equalERK16HMTypeInferrenceRKSt6vectorIN3HIR7TypeRefESaIS5_EES9_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(24) %139, ptr noundef nonnull align 8 dereferenceable(24) %140)
  br i1 %141, label %142, label %.critedge

142:                                              ; preds = %138
  %143 = getelementptr inbounds i8, ptr %127, i64 112
  %144 = getelementptr inbounds i8, ptr %129, i64 112
  br label %tailrecurse.backedge

145:                                              ; preds = %.lr.ph
  %146 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %147 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %146)
  %148 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %149 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %148)
  %150 = getelementptr inbounds i8, ptr %147, i64 144
  %151 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %150) #8
  %152 = getelementptr inbounds i8, ptr %149, i64 144
  %153 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %152) #8
  %.not214 = icmp eq i64 %151, %153
  br i1 %.not214, label %.preheader, label %.critedge

.preheader:                                       ; preds = %145
  %154 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %150) #8
  %.not215279.not = icmp eq i64 %154, 0
  br i1 %.not215279.not, label %.critedge219, label %.lr.ph281

155:                                              ; preds = %163
  %156 = add i32 %.0194280, 1
  %157 = zext i32 %156 to i64
  %158 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %150) #8
  %.not215 = icmp ugt i64 %158, %157
  br i1 %.not215, label %.lr.ph281, label %.critedge219, !llvm.loop !54

.lr.ph281:                                        ; preds = %.preheader, %155
  %159 = phi i64 [ %157, %155 ], [ 0, %.preheader ]
  %.0194280 = phi i32 [ %156, %155 ], [ 0, %.preheader ]
  %160 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %150, i64 noundef %159) #8
  %161 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %159) #8
  %162 = tail call noundef zeroext i1 @_ZNK3HIR10SimplePathneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %160, ptr noundef nonnull align 8 dereferenceable(8) %161)
  br i1 %162, label %.critedge, label %163

163:                                              ; preds = %.lr.ph281
  %164 = getelementptr inbounds i8, ptr %160, i64 8
  %165 = getelementptr inbounds i8, ptr %161, i64 8
  %166 = tail call noundef zeroext i1 @_ZNK16HMTypeInferrence16pathparams_equalERKN3HIR10PathParamsES3_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(24) %164, ptr noundef nonnull align 8 dereferenceable(24) %165)
  br i1 %166, label %155, label %.critedge

.critedge219:                                     ; preds = %155, %.preheader
  %167 = getelementptr inbounds i8, ptr %147, i64 8
  %168 = getelementptr inbounds i8, ptr %149, i64 8
  %169 = tail call noundef zeroext i1 @_ZNK3HIR10SimplePathneERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %167, ptr noundef nonnull align 8 dereferenceable(8) %168)
  br i1 %169, label %.critedge, label %170

170:                                              ; preds = %.critedge219
  %171 = getelementptr inbounds i8, ptr %147, i64 16
  %172 = getelementptr inbounds i8, ptr %149, i64 16
  %173 = tail call noundef zeroext i1 @_ZNK16HMTypeInferrence16pathparams_equalERKN3HIR10PathParamsES3_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(24) %171, ptr noundef nonnull align 8 dereferenceable(24) %172)
  br label %.critedge

174:                                              ; preds = %.lr.ph
  %175 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %176 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %175)
  %177 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %178 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %177)
  %179 = getelementptr inbounds i8, ptr %176, i64 56
  %180 = tail call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %179)
  %181 = getelementptr inbounds i8, ptr %178, i64 56
  %182 = tail call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %181)
  %.not207 = icmp eq i32 %180, %182
  br i1 %.not207, label %.preheader229, label %.critedge

.preheader229:                                    ; preds = %174
  %183 = tail call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %179)
  switch i32 %183, label %.thread224 [
    i32 0, label %.split.us
    i32 1, label %.split272.us
    i32 2, label %.split274.us
    i32 3, label %.split277.us
  ], !llvm.loop !56

.split.us:                                        ; preds = %.preheader229
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 1199, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_) #7
  unreachable

.split272.us:                                     ; preds = %.preheader229
  %184 = tail call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %179)
  %185 = tail call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %181)
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %4) #8
  call void @_ZN3HIR10SimplePathC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5)
  invoke void @_ZN3HIR4PathC1ENS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(88) %4, ptr noundef nonnull %5)
          to label %186 unwind label %193

186:                                              ; preds = %.split272.us
  %187 = invoke noundef zeroext i1 @_ZNK3HIR4PathneERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %184, ptr noundef nonnull align 8 dereferenceable(88) %4)
          to label %188 unwind label %195

188:                                              ; preds = %186
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %4) #8
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %4) #8
  br i1 %187, label %202, label %189

189:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #8
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES8_E3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull %7)
          to label %190 unwind label %198

190:                                              ; preds = %189
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  %191 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %191, ptr noundef nonnull @.str.8)
          to label %192 unwind label %200

192:                                              ; preds = %190
  call void @__cxa_throw(ptr nonnull %191, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #9
  unreachable

193:                                              ; preds = %.split272.us
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %197

195:                                              ; preds = %186
  %196 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %4) #8
  br label %197

197:                                              ; preds = %195, %193
  %.pn = phi { ptr, i32 } [ %196, %195 ], [ %194, %193 ]
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %4) #8
  br label %221

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

200:                                              ; preds = %190
  %201 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %191) #8
  br label %221

202:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %9) #8
  call void @_ZN3HIR10SimplePathC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10)
  invoke void @_ZN3HIR4PathC1ENS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(88) %9, ptr noundef nonnull %10)
          to label %203 unwind label %210

203:                                              ; preds = %202
  %204 = invoke noundef zeroext i1 @_ZNK3HIR4PathneERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %185, ptr noundef nonnull align 8 dereferenceable(88) %9)
          to label %205 unwind label %212

205:                                              ; preds = %203
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %9) #8
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %9) #8
  br i1 %204, label %219, label %206

206:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES8_E3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 1 dereferenceable(1) %13) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull %12)
          to label %207 unwind label %215

207:                                              ; preds = %206
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  %208 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %208, ptr noundef nonnull @.str.8)
          to label %209 unwind label %217

209:                                              ; preds = %207
  call void @__cxa_throw(ptr nonnull %208, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #9
  unreachable

210:                                              ; preds = %202
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %214

212:                                              ; preds = %203
  %213 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %9) #8
  br label %214

214:                                              ; preds = %212, %210
  %.pn210 = phi { ptr, i32 } [ %213, %212 ], [ %211, %210 ]
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %9) #8
  br label %221

215:                                              ; preds = %206
  %216 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br label %221

217:                                              ; preds = %207
  %218 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %208) #8
  br label %221

219:                                              ; preds = %205
  %220 = call noundef zeroext i1 @_ZZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_EN1H12compare_pathERKS_RKNS0_4PathES9_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(88) %184, ptr noundef nonnull align 8 dereferenceable(88) %185)
  br label %.critedge

221:                                              ; preds = %217, %215, %214, %200, %198, %197
  %.pn212 = phi { ptr, i32 } [ %201, %200 ], [ %199, %198 ], [ %218, %217 ], [ %216, %215 ], [ %.pn210, %214 ], [ %.pn, %197 ]
  resume { ptr, i32 } %.pn212

.split274.us:                                     ; preds = %.preheader229
  %222 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %179)
  %223 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %181)
  br label %tailrecurse

.split277.us:                                     ; preds = %.preheader229
  %224 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %179)
  %225 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %181)
  %226 = getelementptr inbounds i8, ptr %224, i64 24
  %227 = tail call noundef ptr @_ZNKSt12__shared_ptrIN3HIR30TypeData_ErasedType_AliasInnerELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %226) #8
  %228 = getelementptr inbounds i8, ptr %225, i64 24
  %229 = tail call noundef ptr @_ZNKSt12__shared_ptrIN3HIR30TypeData_ErasedType_AliasInnerELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %228) #8
  %.not208 = icmp eq ptr %227, %229
  br i1 %.not208, label %230, label %.critedge

230:                                              ; preds = %.split277.us
  %231 = tail call noundef zeroext i1 @_ZNK16HMTypeInferrence16pathparams_equalERKN3HIR10PathParamsES3_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(24) %224, ptr noundef nonnull align 8 dereferenceable(24) %225)
  br label %.critedge

232:                                              ; preds = %.lr.ph
  %233 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
  %234 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %233)
  %235 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
  %236 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %235)
  %237 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_115type_list_equalERK16HMTypeInferrenceRKSt6vectorIN3HIR7TypeRefESaIS5_EES9_(ptr noundef nonnull align 8 dereferenceable(49) %0, ptr noundef nonnull align 8 dereferenceable(24) %234, ptr noundef nonnull align 8 dereferenceable(24) %236)
  br label %.critedge

.thread224:                                       ; preds = %.lr.ph, %.preheader229
  %238 = tail call ptr @__cxa_allocate_exception(i64 8) #8
  store ptr @.str.15, ptr %238, align 16, !tbaa !57
  tail call void @__cxa_throw(ptr nonnull %238, ptr nonnull @_ZTIPKc, ptr null) #9
  unreachable

.critedge:                                        ; preds = %tailrecurse.backedge, %62, %80, %95, %138, %125, %134, %163, %.lr.ph281, %219, %230, %.split277.us, %tailrecurse, %174, %170, %145, %.critedge219, %232, %119, %111, %103, %56, %46, %41, %33, %25
  %.23 = phi i1 [ %237, %232 ], [ %124, %119 ], [ %118, %111 ], [ %110, %103 ], [ %61, %56 ], [ %55, %46 ], [ true, %41 ], [ %40, %33 ], [ %32, %25 ], [ %173, %170 ], [ false, %145 ], [ false, %.critedge219 ], [ false, %174 ], [ false, %tailrecurse ], [ false, %.split277.us ], [ %231, %230 ], [ %220, %219 ], [ false, %.lr.ph281 ], [ false, %163 ], [ false, %134 ], [ false, %125 ], [ false, %138 ], [ false, %95 ], [ false, %80 ], [ false, %62 ], [ false, %tailrecurse.backedge ]
  ret i1 %.23
}

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZZNK16HMTypeInferrence11types_equalERKN3HIR7TypeRefES3_EN1H12compare_pathERKS_RKNS0_4PathES9_(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #6 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 #6 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 #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_115type_list_equalERK16HMTypeInferrenceRKSt6vectorIN3HIR7TypeRefESaIS5_EES9_(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6

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

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

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

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

declare void @_ZN3HIR4PathC1ENS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef) unnamed_addr #4

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

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

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

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

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

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

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


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