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

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

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

@.str.18 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE = external hidden unnamed_addr constant [118 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [9 x i8], align 1

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #3

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #4 align 2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca i8, align 1
  %19 = alloca ptr, align 8
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca i8, align 1
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca i8, align 1
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i8, align 1
  %32 = alloca ptr, align 8
  %33 = alloca i8, align 1
  %34 = alloca ptr, align 8
  %35 = alloca i8, align 1
  %36 = alloca ptr, align 8
  %37 = alloca i8, align 1
  %38 = alloca ptr, align 8
  %39 = alloca i8, align 1
  %40 = alloca ptr, align 8
  %41 = alloca i8, align 1
  %42 = alloca ptr, align 8
  %43 = alloca i8, align 1
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca i8, align 1
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca i8, align 1
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca i8, align 1
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i32, align 4
  %59 = alloca i8, align 1
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca i8, align 1
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i8, align 1
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca i8, align 1
  %72 = alloca ptr, align 8
  %73 = alloca ptr, align 8
  %74 = alloca i8, align 1
  %75 = alloca ptr, align 8
  %76 = alloca ptr, align 8
  %77 = alloca i8, align 1
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca i8, align 1
  %81 = alloca ptr, align 8
  %82 = alloca ptr, align 8
  %83 = alloca i8, align 1
  %84 = alloca ptr, align 8
  %85 = alloca ptr, align 8
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i8, align 1
  %91 = alloca ptr, align 8
  %92 = alloca ptr, align 8
  %93 = alloca i8, align 1
  %94 = alloca ptr, align 8
  %95 = alloca ptr, align 8
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i8, align 1
  %100 = alloca ptr, align 8
  %101 = alloca ptr, align 8
  %102 = alloca i8, align 1
  %103 = alloca ptr, align 8
  %104 = alloca ptr, align 8
  %105 = alloca i8, align 1
  %106 = alloca ptr, align 8
  %107 = alloca ptr, align 8
  %108 = alloca i8, align 1
  %109 = alloca ptr, align 8
  %110 = alloca ptr, align 8
  %111 = alloca i32, align 4
  %112 = alloca i32, align 4
  %113 = alloca i32, align 4
  %114 = alloca i32, align 4
  %115 = alloca i8, align 1
  %116 = alloca ptr, align 8
  %117 = alloca ptr, align 8
  %118 = alloca i8, align 1
  %119 = alloca ptr, align 8
  %120 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  %121 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %122 = load ptr, ptr %9, align 8, !tbaa !5
  %123 = load ptr, ptr %7, align 8, !tbaa !5
  %124 = load ptr, ptr %122, align 8, !tbaa !9
  %125 = getelementptr inbounds ptr, ptr %124, i64 0
  %126 = load ptr, ptr %125, align 8
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr %126(ptr noundef nonnull align 8 dereferenceable(8) %122, ptr noundef nonnull align 8 dereferenceable(8) %123, ptr noundef nonnull align 8 dereferenceable(8) %121)
  store ptr %127, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %128 = load ptr, ptr %9, align 8, !tbaa !5
  %129 = load ptr, ptr %7, align 8, !tbaa !5
  %130 = load ptr, ptr %8, align 8, !tbaa !5
  %131 = load ptr, ptr %128, align 8, !tbaa !9
  %132 = getelementptr inbounds ptr, ptr %131, i64 0
  %133 = load ptr, ptr %132, align 8
  %134 = call noundef nonnull align 8 dereferenceable(8) ptr %133(ptr noundef nonnull align 8 dereferenceable(8) %128, ptr noundef nonnull align 8 dereferenceable(8) %129, ptr noundef nonnull align 8 dereferenceable(8) %130)
  store ptr %134, ptr %11, align 8, !tbaa !5
  %135 = load ptr, ptr %10, align 8, !tbaa !5
  %136 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %135)
  %137 = call noundef zeroext i1 @_ZNK3HIR8TypeData8is_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %136)
  br i1 %137, label %138, label %143

138:                                              ; preds = %4
  %139 = load ptr, ptr %10, align 8, !tbaa !5
  %140 = load ptr, ptr %11, align 8, !tbaa !5
  %141 = call noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %139, ptr noundef nonnull align 8 dereferenceable(8) %140)
  br i1 %141, label %142, label %143

142:                                              ; preds = %138
  store i32 0, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1517

143:                                              ; preds = %138, %4
  %144 = load ptr, ptr %10, 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 i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %145)
  %147 = load ptr, ptr %11, align 8, !tbaa !5
  %148 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %147)
  %149 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %148)
  %150 = icmp ne i32 %146, %149
  br i1 %150, label %151, label %200

151:                                              ; preds = %143
  %152 = load ptr, ptr %10, align 8, !tbaa !5
  %153 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %152)
  %154 = call noundef zeroext i1 @_ZNK3HIR8TypeData7is_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  br i1 %154, label %155, label %162

155:                                              ; preds = %151
  %156 = load ptr, ptr %10, align 8, !tbaa !5
  %157 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %156)
  %158 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %157)
  %159 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %158, i32 0, i32 1
  %160 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %159)
  br i1 %160, label %161, label %162

161:                                              ; preds = %155
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1517

162:                                              ; preds = %155, %151
  %163 = load ptr, ptr %11, align 8, !tbaa !5
  %164 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %163)
  %165 = call noundef zeroext i1 @_ZNK3HIR8TypeData7is_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %164)
  br i1 %165, label %166, label %173

166:                                              ; preds = %162
  %167 = load ptr, ptr %11, align 8, !tbaa !5
  %168 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %167)
  %169 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %168)
  %170 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %169, i32 0, i32 1
  %171 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %170)
  br i1 %171, label %172, label %173

172:                                              ; preds = %166
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1517

173:                                              ; preds = %166, %162
  %174 = load ptr, ptr %10, align 8, !tbaa !5
  %175 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %174)
  %176 = call noundef zeroext i1 @_ZNK3HIR8TypeData10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %175)
  br i1 %176, label %177, label %186

177:                                              ; preds = %173
  %178 = load ptr, ptr %10, align 8, !tbaa !5
  %179 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %178)
  %180 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %179)
  %181 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %180, i32 0, i32 1
  %182 = load i32, ptr %181, align 8, !tbaa !11
  %183 = lshr i32 %182, 8
  %184 = icmp eq i32 %183, 2
  br i1 %184, label %185, label %186

185:                                              ; preds = %177
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1517

186:                                              ; preds = %177, %173
  %187 = load ptr, ptr %11, align 8, !tbaa !5
  %188 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %187)
  %189 = call noundef zeroext i1 @_ZNK3HIR8TypeData10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %188)
  br i1 %189, label %190, label %199

190:                                              ; preds = %186
  %191 = load ptr, ptr %11, align 8, !tbaa !5
  %192 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %191)
  %193 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %192)
  %194 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %193, i32 0, i32 1
  %195 = load i32, ptr %194, align 8, !tbaa !11
  %196 = lshr i32 %195, 8
  %197 = icmp eq i32 %196, 2
  br i1 %197, label %198, label %199

198:                                              ; preds = %190
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1517

199:                                              ; preds = %190, %186
  br label %200

200:                                              ; preds = %199, %143
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %201 = load ptr, ptr %10, align 8, !tbaa !5
  %202 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %201)
  %203 = call noundef ptr @_ZNK3HIR8TypeData9opt_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %202)
  store ptr %203, ptr %13, align 8, !tbaa !5
  %204 = load ptr, ptr %13, align 8, !tbaa !5
  %205 = icmp ne ptr %204, null
  br i1 %205, label %206, label %427

206:                                              ; preds = %200
  %207 = load ptr, ptr %13, align 8, !tbaa !5
  %208 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %207, i32 0, i32 1
  %209 = load i32, ptr %208, align 4, !tbaa !15
  switch i32 %209, label %425 [
    i32 0, label %210
    i32 1, label %211
    i32 2, label %318
  ]

210:                                              ; preds = %206
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %428

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

212:                                              ; preds = %314, %211
  %213 = load i8, ptr %14, align 1, !tbaa !18, !range !20, !noundef !21
  %214 = trunc i8 %213 to i1
  br i1 %214, label %216, label %215

215:                                              ; preds = %212
  store i32 3, ptr %12, align 4
  br label %315

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

219:                                              ; preds = %310, %216
  %220 = load i8, ptr %14, align 1, !tbaa !18, !range !20, !noundef !21
  %221 = trunc i8 %220 to i1
  br i1 %221, label %223, label %222

222:                                              ; preds = %219
  store i32 6, ptr %12, align 4
  br label %311

223:                                              ; preds = %219
  %224 = load ptr, ptr %15, align 8, !tbaa !5
  %225 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %224)
  switch i32 %225, label %227 [
    i32 0, label %226
    i32 3, label %228
    i32 1, label %254
    i32 4, label %282
  ]

226:                                              ; preds = %223
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 1314, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #7
  unreachable

227:                                              ; preds = %223
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %311

228:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #6
  store i8 1, ptr %16, align 1, !tbaa !18
  br label %229

229:                                              ; preds = %250, %228
  %230 = load i8, ptr %16, align 1, !tbaa !18, !range !20, !noundef !21
  %231 = trunc i8 %230 to i1
  br i1 %231, label %233, label %232

232:                                              ; preds = %229
  store i32 10, ptr %12, align 4
  br label %251

233:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %234 = load ptr, ptr %15, align 8, !tbaa !5
  %235 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %234)
  store ptr %235, ptr %17, align 8, !tbaa !5
  br label %236

236:                                              ; preds = %246, %233
  %237 = load ptr, ptr %17, align 8, !tbaa !5
  %238 = load i8, ptr %16, align 1, !tbaa !18, !range !20, !noundef !21
  %239 = trunc i8 %238 to i1
  br i1 %239, label %241, label %240

240:                                              ; preds = %236
  store i32 13, ptr %12, align 4
  br label %247

241:                                              ; preds = %236
  %242 = load ptr, ptr %17, align 8, !tbaa !5
  %243 = load i32, ptr %242, align 4, !tbaa !22
  switch i32 %243, label %245 [
    i32 3, label %244
    i32 2, label %244
    i32 5, label %244
    i32 4, label %244
    i32 7, label %244
    i32 6, label %244
    i32 9, label %244
    i32 8, label %244
    i32 11, label %244
    i32 10, label %244
    i32 1, label %244
    i32 0, label %244
  ]

244:                                              ; preds = %241, %241, %241, %241, %241, %241, %241, %241, %241, %241, %241, %241
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %247

245:                                              ; preds = %241
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %247

246:                                              ; No predecessors!
  store i8 0, ptr %16, align 1, !tbaa !18
  br label %236, !llvm.loop !24

247:                                              ; preds = %245, %244, %240
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  %248 = load i32, ptr %12, align 4
  switch i32 %248, label %251 [
    i32 13, label %249
  ]

249:                                              ; preds = %247
  br label %250

250:                                              ; preds = %249
  store i8 0, ptr %16, align 1, !tbaa !18
  br label %229, !llvm.loop !26

251:                                              ; preds = %247, %232
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #6
  %252 = load i32, ptr %12, align 4
  switch i32 %252, label %311 [
    i32 10, label %253
  ]

253:                                              ; preds = %251
  br label %309

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

255:                                              ; preds = %278, %254
  %256 = load i8, ptr %18, align 1, !tbaa !18, !range !20, !noundef !21
  %257 = trunc i8 %256 to i1
  br i1 %257, label %259, label %258

258:                                              ; preds = %255
  store i32 17, ptr %12, align 4
  br label %279

259:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %260 = load ptr, ptr %15, align 8, !tbaa !5
  %261 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %260)
  store ptr %261, ptr %19, align 8, !tbaa !5
  br label %262

262:                                              ; preds = %274, %259
  %263 = load ptr, ptr %19, align 8, !tbaa !5
  %264 = load i8, ptr %18, align 1, !tbaa !18, !range !20, !noundef !21
  %265 = trunc i8 %264 to i1
  br i1 %265, label %267, label %266

266:                                              ; preds = %262
  store i32 20, ptr %12, align 4
  br label %275

267:                                              ; preds = %262
  %268 = load ptr, ptr %19, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %268, i32 0, i32 1
  %270 = load i32, ptr %269, align 4, !tbaa !15
  switch i32 %270, label %273 [
    i32 0, label %271
    i32 1, label %271
    i32 2, label %272
  ]

271:                                              ; preds = %267, %267
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %275

272:                                              ; preds = %267
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %275

273:                                              ; preds = %267
  br label %274

274:                                              ; preds = %273
  store i8 0, ptr %18, align 1, !tbaa !18
  br label %262, !llvm.loop !27

275:                                              ; preds = %272, %271, %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  %276 = load i32, ptr %12, align 4
  switch i32 %276, label %279 [
    i32 20, label %277
  ]

277:                                              ; preds = %275
  br label %278

278:                                              ; preds = %277
  store i8 0, ptr %18, align 1, !tbaa !18
  br label %255, !llvm.loop !28

279:                                              ; preds = %275, %258
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #6
  %280 = load i32, ptr %12, align 4
  switch i32 %280, label %311 [
    i32 17, label %281
  ]

281:                                              ; preds = %279
  br label %309

282:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #6
  store i8 1, ptr %20, align 1, !tbaa !18
  br label %283

283:                                              ; preds = %305, %282
  %284 = load i8, ptr %20, align 1, !tbaa !18, !range !20, !noundef !21
  %285 = trunc i8 %284 to i1
  br i1 %285, label %287, label %286

286:                                              ; preds = %283
  store i32 24, ptr %12, align 4
  br label %306

287:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %288 = load ptr, ptr %15, align 8, !tbaa !5
  %289 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %288)
  store ptr %289, ptr %21, align 8, !tbaa !5
  br label %290

290:                                              ; preds = %301, %287
  %291 = load ptr, ptr %21, align 8, !tbaa !5
  %292 = load i8, ptr %20, align 1, !tbaa !18, !range !20, !noundef !21
  %293 = trunc i8 %292 to i1
  br i1 %293, label %295, label %294

294:                                              ; preds = %290
  store i32 27, ptr %12, align 4
  br label %302

295:                                              ; preds = %290
  %296 = load ptr, ptr %21, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %296, i32 0, i32 1
  %298 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %297)
  %299 = zext i1 %298 to i64
  %300 = select i1 %298, i32 1, i32 2
  store i32 %300, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %302

301:                                              ; No predecessors!
  store i8 0, ptr %20, align 1, !tbaa !18
  br label %290, !llvm.loop !29

302:                                              ; preds = %295, %294
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  %303 = load i32, ptr %12, align 4
  switch i32 %303, label %306 [
    i32 27, label %304
  ]

304:                                              ; preds = %302
  br label %305

305:                                              ; preds = %304
  store i8 0, ptr %20, align 1, !tbaa !18
  br label %283, !llvm.loop !30

306:                                              ; preds = %302, %286
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #6
  %307 = load i32, ptr %12, align 4
  switch i32 %307, label %311 [
    i32 24, label %308
  ]

308:                                              ; preds = %306
  br label %309

309:                                              ; preds = %308, %281, %253
  br label %310

310:                                              ; preds = %309
  store i8 0, ptr %14, align 1, !tbaa !18
  br label %219, !llvm.loop !31

311:                                              ; preds = %306, %279, %251, %227, %222
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  %312 = load i32, ptr %12, align 4
  switch i32 %312, label %315 [
    i32 6, label %313
  ]

313:                                              ; preds = %311
  br label %314

314:                                              ; preds = %313
  store i8 0, ptr %14, align 1, !tbaa !18
  br label %212, !llvm.loop !32

315:                                              ; preds = %311, %215
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  %316 = load i32, ptr %12, align 4
  switch i32 %316, label %428 [
    i32 3, label %317
  ]

317:                                              ; preds = %315
  br label %318

318:                                              ; preds = %317, %206
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #6
  store i8 1, ptr %22, align 1, !tbaa !18
  br label %319

319:                                              ; preds = %421, %318
  %320 = load i8, ptr %22, align 1, !tbaa !18, !range !20, !noundef !21
  %321 = trunc i8 %320 to i1
  br i1 %321, label %323, label %322

322:                                              ; preds = %319
  store i32 30, ptr %12, align 4
  br label %422

323:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %324 = load ptr, ptr %11, align 8, !tbaa !5
  %325 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %324)
  store ptr %325, ptr %23, align 8, !tbaa !5
  br label %326

326:                                              ; preds = %417, %323
  %327 = load i8, ptr %22, align 1, !tbaa !18, !range !20, !noundef !21
  %328 = trunc i8 %327 to i1
  br i1 %328, label %330, label %329

329:                                              ; preds = %326
  store i32 33, ptr %12, align 4
  br label %418

330:                                              ; preds = %326
  %331 = load ptr, ptr %23, align 8, !tbaa !5
  %332 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %331)
  switch i32 %332, label %334 [
    i32 0, label %333
    i32 3, label %335
    i32 1, label %361
    i32 4, label %389
  ]

333:                                              ; preds = %330
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 1346, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #7
  unreachable

334:                                              ; preds = %330
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %418

335:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #6
  store i8 1, ptr %24, align 1, !tbaa !18
  br label %336

336:                                              ; preds = %357, %335
  %337 = load i8, ptr %24, align 1, !tbaa !18, !range !20, !noundef !21
  %338 = trunc i8 %337 to i1
  br i1 %338, label %340, label %339

339:                                              ; preds = %336
  store i32 37, ptr %12, align 4
  br label %358

340:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %341 = load ptr, ptr %23, align 8, !tbaa !5
  %342 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %341)
  store ptr %342, ptr %25, align 8, !tbaa !5
  br label %343

343:                                              ; preds = %353, %340
  %344 = load ptr, ptr %25, align 8, !tbaa !5
  %345 = load i8, ptr %24, align 1, !tbaa !18, !range !20, !noundef !21
  %346 = trunc i8 %345 to i1
  br i1 %346, label %348, label %347

347:                                              ; preds = %343
  store i32 40, ptr %12, align 4
  br label %354

348:                                              ; preds = %343
  %349 = load ptr, ptr %25, align 8, !tbaa !5
  %350 = load i32, ptr %349, align 4, !tbaa !22
  switch i32 %350, label %352 [
    i32 12, label %351
    i32 13, label %351
  ]

351:                                              ; preds = %348, %348
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %354

352:                                              ; preds = %348
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %354

353:                                              ; No predecessors!
  store i8 0, ptr %24, align 1, !tbaa !18
  br label %343, !llvm.loop !33

354:                                              ; preds = %352, %351, %347
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  %355 = load i32, ptr %12, align 4
  switch i32 %355, label %358 [
    i32 40, label %356
  ]

356:                                              ; preds = %354
  br label %357

357:                                              ; preds = %356
  store i8 0, ptr %24, align 1, !tbaa !18
  br label %336, !llvm.loop !34

358:                                              ; preds = %354, %339
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  %359 = load i32, ptr %12, align 4
  switch i32 %359, label %418 [
    i32 37, label %360
  ]

360:                                              ; preds = %358
  br label %416

361:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #6
  store i8 1, ptr %26, align 1, !tbaa !18
  br label %362

362:                                              ; preds = %385, %361
  %363 = load i8, ptr %26, align 1, !tbaa !18, !range !20, !noundef !21
  %364 = trunc i8 %363 to i1
  br i1 %364, label %366, label %365

365:                                              ; preds = %362
  store i32 44, ptr %12, align 4
  br label %386

366:                                              ; preds = %362
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %367 = load ptr, ptr %23, align 8, !tbaa !5
  %368 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %367)
  store ptr %368, ptr %27, align 8, !tbaa !5
  br label %369

369:                                              ; preds = %381, %366
  %370 = load ptr, ptr %27, align 8, !tbaa !5
  %371 = load i8, ptr %26, align 1, !tbaa !18, !range !20, !noundef !21
  %372 = trunc i8 %371 to i1
  br i1 %372, label %374, label %373

373:                                              ; preds = %369
  store i32 47, ptr %12, align 4
  br label %382

374:                                              ; preds = %369
  %375 = load ptr, ptr %27, align 8, !tbaa !5
  %376 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %375, i32 0, i32 1
  %377 = load i32, ptr %376, align 4, !tbaa !15
  switch i32 %377, label %380 [
    i32 0, label %378
    i32 2, label %378
    i32 1, label %379
  ]

378:                                              ; preds = %374, %374
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %382

379:                                              ; preds = %374
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %382

380:                                              ; preds = %374
  br label %381

381:                                              ; preds = %380
  store i8 0, ptr %26, align 1, !tbaa !18
  br label %369, !llvm.loop !35

382:                                              ; preds = %379, %378, %373
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  %383 = load i32, ptr %12, align 4
  switch i32 %383, label %386 [
    i32 47, label %384
  ]

384:                                              ; preds = %382
  br label %385

385:                                              ; preds = %384
  store i8 0, ptr %26, align 1, !tbaa !18
  br label %362, !llvm.loop !36

386:                                              ; preds = %382, %365
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #6
  %387 = load i32, ptr %12, align 4
  switch i32 %387, label %418 [
    i32 44, label %388
  ]

388:                                              ; preds = %386
  br label %416

389:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #6
  store i8 1, ptr %28, align 1, !tbaa !18
  br label %390

390:                                              ; preds = %412, %389
  %391 = load i8, ptr %28, align 1, !tbaa !18, !range !20, !noundef !21
  %392 = trunc i8 %391 to i1
  br i1 %392, label %394, label %393

393:                                              ; preds = %390
  store i32 51, ptr %12, align 4
  br label %413

394:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %395 = load ptr, ptr %23, align 8, !tbaa !5
  %396 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %395)
  store ptr %396, ptr %29, align 8, !tbaa !5
  br label %397

397:                                              ; preds = %408, %394
  %398 = load ptr, ptr %29, align 8, !tbaa !5
  %399 = load i8, ptr %28, align 1, !tbaa !18, !range !20, !noundef !21
  %400 = trunc i8 %399 to i1
  br i1 %400, label %402, label %401

401:                                              ; preds = %397
  store i32 54, ptr %12, align 4
  br label %409

402:                                              ; preds = %397
  %403 = load ptr, ptr %29, align 8, !tbaa !5
  %404 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %403, i32 0, i32 1
  %405 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %404)
  %406 = zext i1 %405 to i64
  %407 = select i1 %405, i32 1, i32 2
  store i32 %407, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %409

408:                                              ; No predecessors!
  store i8 0, ptr %28, align 1, !tbaa !18
  br label %397, !llvm.loop !37

409:                                              ; preds = %402, %401
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  %410 = load i32, ptr %12, align 4
  switch i32 %410, label %413 [
    i32 54, label %411
  ]

411:                                              ; preds = %409
  br label %412

412:                                              ; preds = %411
  store i8 0, ptr %28, align 1, !tbaa !18
  br label %390, !llvm.loop !38

413:                                              ; preds = %409, %393
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #6
  %414 = load i32, ptr %12, align 4
  switch i32 %414, label %418 [
    i32 51, label %415
  ]

415:                                              ; preds = %413
  br label %416

416:                                              ; preds = %415, %388, %360
  br label %417

417:                                              ; preds = %416
  store i8 0, ptr %22, align 1, !tbaa !18
  br label %326, !llvm.loop !39

418:                                              ; preds = %413, %386, %358, %334, %329
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  %419 = load i32, ptr %12, align 4
  switch i32 %419, label %422 [
    i32 33, label %420
  ]

420:                                              ; preds = %418
  br label %421

421:                                              ; preds = %420
  store i8 0, ptr %22, align 1, !tbaa !18
  br label %319, !llvm.loop !40

422:                                              ; preds = %418, %322
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  %423 = load i32, ptr %12, align 4
  switch i32 %423, label %428 [
    i32 30, label %424
  ]

424:                                              ; preds = %422
  br label %425

425:                                              ; preds = %424, %206
  %426 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.24, ptr %426, align 16, !tbaa !5
  call void @__cxa_throw(ptr %426, ptr @_ZTIPKc, ptr null) #8
  unreachable

427:                                              ; preds = %200
  store i32 0, ptr %12, align 4
  br label %428

428:                                              ; preds = %427, %422, %315, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  %429 = load i32, ptr %12, align 4
  switch i32 %429, label %1517 [
    i32 0, label %430
  ]

430:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %431 = load ptr, ptr %11, align 8, !tbaa !5
  %432 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %431)
  %433 = call noundef ptr @_ZNK3HIR8TypeData9opt_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %432)
  store ptr %433, ptr %30, align 8, !tbaa !5
  %434 = load ptr, ptr %30, align 8, !tbaa !5
  %435 = icmp ne ptr %434, null
  br i1 %435, label %436, label %601

436:                                              ; preds = %430
  %437 = load ptr, ptr %30, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %437, i32 0, i32 1
  %439 = load i32, ptr %438, align 4, !tbaa !15
  switch i32 %439, label %599 [
    i32 0, label %440
    i32 1, label %441
    i32 2, label %520
  ]

440:                                              ; preds = %436
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %602

441:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #6
  store i8 1, ptr %31, align 1, !tbaa !18
  br label %442

442:                                              ; preds = %516, %441
  %443 = load i8, ptr %31, align 1, !tbaa !18, !range !20, !noundef !21
  %444 = trunc i8 %443 to i1
  br i1 %444, label %446, label %445

445:                                              ; preds = %442
  store i32 58, ptr %12, align 4
  br label %517

446:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %447 = load ptr, ptr %10, align 8, !tbaa !5
  %448 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %447)
  store ptr %448, ptr %32, align 8, !tbaa !5
  br label %449

449:                                              ; preds = %512, %446
  %450 = load i8, ptr %31, align 1, !tbaa !18, !range !20, !noundef !21
  %451 = trunc i8 %450 to i1
  br i1 %451, label %453, label %452

452:                                              ; preds = %449
  store i32 61, ptr %12, align 4
  br label %513

453:                                              ; preds = %449
  %454 = load ptr, ptr %32, align 8, !tbaa !5
  %455 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %454)
  switch i32 %455, label %457 [
    i32 0, label %456
    i32 3, label %458
    i32 4, label %484
  ]

456:                                              ; preds = %453
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 1385, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #7
  unreachable

457:                                              ; preds = %453
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %513

458:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #6
  store i8 1, ptr %33, align 1, !tbaa !18
  br label %459

459:                                              ; preds = %480, %458
  %460 = load i8, ptr %33, align 1, !tbaa !18, !range !20, !noundef !21
  %461 = trunc i8 %460 to i1
  br i1 %461, label %463, label %462

462:                                              ; preds = %459
  store i32 65, ptr %12, align 4
  br label %481

463:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %464 = load ptr, ptr %32, align 8, !tbaa !5
  %465 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %464)
  store ptr %465, ptr %34, align 8, !tbaa !5
  br label %466

466:                                              ; preds = %476, %463
  %467 = load ptr, ptr %34, align 8, !tbaa !5
  %468 = load i8, ptr %33, align 1, !tbaa !18, !range !20, !noundef !21
  %469 = trunc i8 %468 to i1
  br i1 %469, label %471, label %470

470:                                              ; preds = %466
  store i32 68, ptr %12, align 4
  br label %477

471:                                              ; preds = %466
  %472 = load ptr, ptr %34, align 8, !tbaa !5
  %473 = load i32, ptr %472, align 4, !tbaa !22
  switch i32 %473, label %475 [
    i32 3, label %474
    i32 2, label %474
    i32 5, label %474
    i32 4, label %474
    i32 7, label %474
    i32 6, label %474
    i32 9, label %474
    i32 8, label %474
    i32 11, label %474
    i32 10, label %474
    i32 1, label %474
    i32 0, label %474
  ]

474:                                              ; preds = %471, %471, %471, %471, %471, %471, %471, %471, %471, %471, %471, %471
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %477

475:                                              ; preds = %471
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %477

476:                                              ; No predecessors!
  store i8 0, ptr %33, align 1, !tbaa !18
  br label %466, !llvm.loop !41

477:                                              ; preds = %475, %474, %470
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  %478 = load i32, ptr %12, align 4
  switch i32 %478, label %481 [
    i32 68, label %479
  ]

479:                                              ; preds = %477
  br label %480

480:                                              ; preds = %479
  store i8 0, ptr %33, align 1, !tbaa !18
  br label %459, !llvm.loop !42

481:                                              ; preds = %477, %462
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #6
  %482 = load i32, ptr %12, align 4
  switch i32 %482, label %513 [
    i32 65, label %483
  ]

483:                                              ; preds = %481
  br label %511

484:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #6
  store i8 1, ptr %35, align 1, !tbaa !18
  br label %485

485:                                              ; preds = %507, %484
  %486 = load i8, ptr %35, align 1, !tbaa !18, !range !20, !noundef !21
  %487 = trunc i8 %486 to i1
  br i1 %487, label %489, label %488

488:                                              ; preds = %485
  store i32 72, ptr %12, align 4
  br label %508

489:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %490 = load ptr, ptr %32, align 8, !tbaa !5
  %491 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %490)
  store ptr %491, ptr %36, align 8, !tbaa !5
  br label %492

492:                                              ; preds = %503, %489
  %493 = load ptr, ptr %36, align 8, !tbaa !5
  %494 = load i8, ptr %35, align 1, !tbaa !18, !range !20, !noundef !21
  %495 = trunc i8 %494 to i1
  br i1 %495, label %497, label %496

496:                                              ; preds = %492
  store i32 75, ptr %12, align 4
  br label %504

497:                                              ; preds = %492
  %498 = load ptr, ptr %36, align 8, !tbaa !5
  %499 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %498, i32 0, i32 1
  %500 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %499)
  %501 = zext i1 %500 to i64
  %502 = select i1 %500, i32 1, i32 2
  store i32 %502, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %504

503:                                              ; No predecessors!
  store i8 0, ptr %35, align 1, !tbaa !18
  br label %492, !llvm.loop !43

504:                                              ; preds = %497, %496
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  %505 = load i32, ptr %12, align 4
  switch i32 %505, label %508 [
    i32 75, label %506
  ]

506:                                              ; preds = %504
  br label %507

507:                                              ; preds = %506
  store i8 0, ptr %35, align 1, !tbaa !18
  br label %485, !llvm.loop !44

508:                                              ; preds = %504, %488
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #6
  %509 = load i32, ptr %12, align 4
  switch i32 %509, label %513 [
    i32 72, label %510
  ]

510:                                              ; preds = %508
  br label %511

511:                                              ; preds = %510, %483
  br label %512

512:                                              ; preds = %511
  store i8 0, ptr %31, align 1, !tbaa !18
  br label %449, !llvm.loop !45

513:                                              ; preds = %508, %481, %457, %452
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  %514 = load i32, ptr %12, align 4
  switch i32 %514, label %517 [
    i32 61, label %515
  ]

515:                                              ; preds = %513
  br label %516

516:                                              ; preds = %515
  store i8 0, ptr %31, align 1, !tbaa !18
  br label %442, !llvm.loop !46

517:                                              ; preds = %513, %445
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #6
  %518 = load i32, ptr %12, align 4
  switch i32 %518, label %602 [
    i32 58, label %519
  ]

519:                                              ; preds = %517
  br label %520

520:                                              ; preds = %519, %436
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #6
  store i8 1, ptr %37, align 1, !tbaa !18
  br label %521

521:                                              ; preds = %595, %520
  %522 = load i8, ptr %37, align 1, !tbaa !18, !range !20, !noundef !21
  %523 = trunc i8 %522 to i1
  br i1 %523, label %525, label %524

524:                                              ; preds = %521
  store i32 78, ptr %12, align 4
  br label %596

525:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %526 = load ptr, ptr %10, align 8, !tbaa !5
  %527 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %526)
  store ptr %527, ptr %38, align 8, !tbaa !5
  br label %528

528:                                              ; preds = %591, %525
  %529 = load i8, ptr %37, align 1, !tbaa !18, !range !20, !noundef !21
  %530 = trunc i8 %529 to i1
  br i1 %530, label %532, label %531

531:                                              ; preds = %528
  store i32 81, ptr %12, align 4
  br label %592

532:                                              ; preds = %528
  %533 = load ptr, ptr %38, align 8, !tbaa !5
  %534 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %533)
  switch i32 %534, label %536 [
    i32 0, label %535
    i32 3, label %537
    i32 4, label %563
  ]

535:                                              ; preds = %532
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 1407, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #7
  unreachable

536:                                              ; preds = %532
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %592

537:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #6
  store i8 1, ptr %39, align 1, !tbaa !18
  br label %538

538:                                              ; preds = %559, %537
  %539 = load i8, ptr %39, align 1, !tbaa !18, !range !20, !noundef !21
  %540 = trunc i8 %539 to i1
  br i1 %540, label %542, label %541

541:                                              ; preds = %538
  store i32 85, ptr %12, align 4
  br label %560

542:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %543 = load ptr, ptr %38, align 8, !tbaa !5
  %544 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %543)
  store ptr %544, ptr %40, align 8, !tbaa !5
  br label %545

545:                                              ; preds = %555, %542
  %546 = load ptr, ptr %40, align 8, !tbaa !5
  %547 = load i8, ptr %39, align 1, !tbaa !18, !range !20, !noundef !21
  %548 = trunc i8 %547 to i1
  br i1 %548, label %550, label %549

549:                                              ; preds = %545
  store i32 88, ptr %12, align 4
  br label %556

550:                                              ; preds = %545
  %551 = load ptr, ptr %40, align 8, !tbaa !5
  %552 = load i32, ptr %551, align 4, !tbaa !22
  switch i32 %552, label %554 [
    i32 12, label %553
    i32 13, label %553
  ]

553:                                              ; preds = %550, %550
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %556

554:                                              ; preds = %550
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %556

555:                                              ; No predecessors!
  store i8 0, ptr %39, align 1, !tbaa !18
  br label %545, !llvm.loop !47

556:                                              ; preds = %554, %553, %549
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  %557 = load i32, ptr %12, align 4
  switch i32 %557, label %560 [
    i32 88, label %558
  ]

558:                                              ; preds = %556
  br label %559

559:                                              ; preds = %558
  store i8 0, ptr %39, align 1, !tbaa !18
  br label %538, !llvm.loop !48

560:                                              ; preds = %556, %541
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #6
  %561 = load i32, ptr %12, align 4
  switch i32 %561, label %592 [
    i32 85, label %562
  ]

562:                                              ; preds = %560
  br label %590

563:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #6
  store i8 1, ptr %41, align 1, !tbaa !18
  br label %564

564:                                              ; preds = %586, %563
  %565 = load i8, ptr %41, align 1, !tbaa !18, !range !20, !noundef !21
  %566 = trunc i8 %565 to i1
  br i1 %566, label %568, label %567

567:                                              ; preds = %564
  store i32 92, ptr %12, align 4
  br label %587

568:                                              ; preds = %564
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %569 = load ptr, ptr %38, align 8, !tbaa !5
  %570 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %569)
  store ptr %570, ptr %42, align 8, !tbaa !5
  br label %571

571:                                              ; preds = %582, %568
  %572 = load ptr, ptr %42, align 8, !tbaa !5
  %573 = load i8, ptr %41, align 1, !tbaa !18, !range !20, !noundef !21
  %574 = trunc i8 %573 to i1
  br i1 %574, label %576, label %575

575:                                              ; preds = %571
  store i32 95, ptr %12, align 4
  br label %583

576:                                              ; preds = %571
  %577 = load ptr, ptr %42, align 8, !tbaa !5
  %578 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %577, i32 0, i32 1
  %579 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %578)
  %580 = zext i1 %579 to i64
  %581 = select i1 %579, i32 1, i32 2
  store i32 %581, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %583

582:                                              ; No predecessors!
  store i8 0, ptr %41, align 1, !tbaa !18
  br label %571, !llvm.loop !49

583:                                              ; preds = %576, %575
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  %584 = load i32, ptr %12, align 4
  switch i32 %584, label %587 [
    i32 95, label %585
  ]

585:                                              ; preds = %583
  br label %586

586:                                              ; preds = %585
  store i8 0, ptr %41, align 1, !tbaa !18
  br label %564, !llvm.loop !50

587:                                              ; preds = %583, %567
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #6
  %588 = load i32, ptr %12, align 4
  switch i32 %588, label %592 [
    i32 92, label %589
  ]

589:                                              ; preds = %587
  br label %590

590:                                              ; preds = %589, %562
  br label %591

591:                                              ; preds = %590
  store i8 0, ptr %37, align 1, !tbaa !18
  br label %528, !llvm.loop !51

592:                                              ; preds = %587, %560, %536, %531
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  %593 = load i32, ptr %12, align 4
  switch i32 %593, label %596 [
    i32 81, label %594
  ]

594:                                              ; preds = %592
  br label %595

595:                                              ; preds = %594
  store i8 0, ptr %37, align 1, !tbaa !18
  br label %521, !llvm.loop !52

596:                                              ; preds = %592, %524
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #6
  %597 = load i32, ptr %12, align 4
  switch i32 %597, label %602 [
    i32 78, label %598
  ]

598:                                              ; preds = %596
  br label %599

599:                                              ; preds = %598, %436
  %600 = call ptr @__cxa_allocate_exception(i64 8) #6
  store ptr @.str.24, ptr %600, align 16, !tbaa !5
  call void @__cxa_throw(ptr %600, ptr @_ZTIPKc, ptr null) #8
  unreachable

601:                                              ; preds = %430
  store i32 0, ptr %12, align 4
  br label %602

602:                                              ; preds = %601, %596, %517, %440
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  %603 = load i32, ptr %12, align 4
  switch i32 %603, label %1517 [
    i32 0, label %604
  ]

604:                                              ; preds = %602
  %605 = load ptr, ptr %10, align 8, !tbaa !5
  %606 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %605)
  %607 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %606)
  %608 = load ptr, ptr %11, align 8, !tbaa !5
  %609 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %608)
  %610 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %609)
  %611 = icmp ne i32 %607, %610
  br i1 %611, label %612, label %613

612:                                              ; preds = %604
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1517

613:                                              ; preds = %604
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #6
  store i8 1, ptr %43, align 1, !tbaa !18
  br label %614

614:                                              ; preds = %1512, %613
  %615 = load i8, ptr %43, align 1, !tbaa !18, !range !20, !noundef !21
  %616 = trunc i8 %615 to i1
  br i1 %616, label %618, label %617

617:                                              ; preds = %614
  store i32 98, ptr %12, align 4
  br label %1513

618:                                              ; preds = %614
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %619 = load ptr, ptr %10, align 8, !tbaa !5
  %620 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %619)
  store ptr %620, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %621 = load ptr, ptr %11, align 8, !tbaa !5
  %622 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %621)
  store ptr %622, ptr %45, align 8, !tbaa !5
  br label %623

623:                                              ; preds = %1508, %618
  %624 = load i8, ptr %43, align 1, !tbaa !18, !range !20, !noundef !21
  %625 = trunc i8 %624 to i1
  br i1 %625, label %627, label %626

626:                                              ; preds = %623
  store i32 101, ptr %12, align 4
  br label %1509

627:                                              ; preds = %623
  %628 = load ptr, ptr %44, align 8, !tbaa !5
  %629 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %628)
  switch i32 %629, label %1507 [
    i32 0, label %630
    i32 1, label %631
    i32 2, label %652
    i32 3, label %677
    i32 4, label %709
    i32 5, label %755
    i32 6, label %803
    i32 7, label %890
    i32 8, label %1060
    i32 9, label %1127
    i32 10, label %1159
    i32 11, label %1229
    i32 12, label %1270
    i32 13, label %1311
    i32 14, label %1343
    i32 15, label %1439
    i32 16, label %1473
  ]

630:                                              ; preds = %627
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 1434, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #7
  unreachable

631:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #6
  store i8 1, ptr %46, align 1, !tbaa !18
  br label %632

632:                                              ; preds = %650, %631
  %633 = load i8, ptr %46, align 1, !tbaa !18, !range !20, !noundef !21
  %634 = trunc i8 %633 to i1
  br i1 %634, label %636, label %635

635:                                              ; preds = %632
  store i32 105, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #6
  br label %651

636:                                              ; preds = %632
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %637 = load ptr, ptr %44, align 8, !tbaa !5
  %638 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %637)
  store ptr %638, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  %639 = load ptr, ptr %45, align 8, !tbaa !5
  %640 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %639)
  store ptr %640, ptr %48, align 8, !tbaa !5
  br label %641

641:                                              ; preds = %648, %636
  %642 = load ptr, ptr %47, align 8, !tbaa !5
  %643 = load ptr, ptr %48, align 8, !tbaa !5
  %644 = load i8, ptr %46, align 1, !tbaa !18, !range !20, !noundef !21
  %645 = trunc i8 %644 to i1
  br i1 %645, label %647, label %646

646:                                              ; preds = %641
  store i32 108, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  br label %649

647:                                              ; preds = %641
  call void @__assert_fail(ptr noundef @.str.86, ptr noundef @.str.18, i32 noundef 1435, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #7
  unreachable

648:                                              ; No predecessors!
  store i8 0, ptr %46, align 1, !tbaa !18
  br label %641, !llvm.loop !53

649:                                              ; preds = %646
  br label %650

650:                                              ; preds = %649
  store i8 0, ptr %46, align 1, !tbaa !18
  br label %632, !llvm.loop !54

651:                                              ; preds = %635
  br label %1507

652:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #6
  store i8 1, ptr %49, align 1, !tbaa !18
  br label %653

653:                                              ; preds = %673, %652
  %654 = load i8, ptr %49, align 1, !tbaa !18, !range !20, !noundef !21
  %655 = trunc i8 %654 to i1
  br i1 %655, label %657, label %656

656:                                              ; preds = %653
  store i32 111, ptr %12, align 4
  br label %674

657:                                              ; preds = %653
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %658 = load ptr, ptr %44, align 8, !tbaa !5
  %659 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %658)
  store ptr %659, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  %660 = load ptr, ptr %45, align 8, !tbaa !5
  %661 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %660)
  store ptr %661, ptr %51, align 8, !tbaa !5
  br label %662

662:                                              ; preds = %669, %657
  %663 = load ptr, ptr %50, align 8, !tbaa !5
  %664 = load ptr, ptr %51, align 8, !tbaa !5
  %665 = load i8, ptr %49, align 1, !tbaa !18, !range !20, !noundef !21
  %666 = trunc i8 %665 to i1
  br i1 %666, label %668, label %667

667:                                              ; preds = %662
  store i32 114, ptr %12, align 4
  br label %670

668:                                              ; preds = %662
  store i32 0, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %670

669:                                              ; No predecessors!
  store i8 0, ptr %49, align 1, !tbaa !18
  br label %662, !llvm.loop !55

670:                                              ; preds = %668, %667
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  %671 = load i32, ptr %12, align 4
  switch i32 %671, label %674 [
    i32 114, label %672
  ]

672:                                              ; preds = %670
  br label %673

673:                                              ; preds = %672
  store i8 0, ptr %49, align 1, !tbaa !18
  br label %653, !llvm.loop !56

674:                                              ; preds = %670, %656
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #6
  %675 = load i32, ptr %12, align 4
  switch i32 %675, label %1509 [
    i32 111, label %676
  ]

676:                                              ; preds = %674
  br label %1507

677:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #6
  store i8 1, ptr %52, align 1, !tbaa !18
  br label %678

678:                                              ; preds = %705, %677
  %679 = load i8, ptr %52, align 1, !tbaa !18, !range !20, !noundef !21
  %680 = trunc i8 %679 to i1
  br i1 %680, label %682, label %681

681:                                              ; preds = %678
  store i32 117, ptr %12, align 4
  br label %706

682:                                              ; preds = %678
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  %683 = load ptr, ptr %44, align 8, !tbaa !5
  %684 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %683)
  store ptr %684, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  %685 = load ptr, ptr %45, align 8, !tbaa !5
  %686 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %685)
  store ptr %686, ptr %54, align 8, !tbaa !5
  br label %687

687:                                              ; preds = %701, %682
  %688 = load ptr, ptr %53, align 8, !tbaa !5
  %689 = load ptr, ptr %54, align 8, !tbaa !5
  %690 = load i8, ptr %52, align 1, !tbaa !18, !range !20, !noundef !21
  %691 = trunc i8 %690 to i1
  br i1 %691, label %693, label %692

692:                                              ; preds = %687
  store i32 120, ptr %12, align 4
  br label %702

693:                                              ; preds = %687
  %694 = load ptr, ptr %53, align 8, !tbaa !5
  %695 = load i32, ptr %694, align 4, !tbaa !22
  %696 = load ptr, ptr %54, align 8, !tbaa !5
  %697 = load i32, ptr %696, align 4, !tbaa !22
  %698 = icmp eq i32 %695, %697
  %699 = zext i1 %698 to i64
  %700 = select i1 %698, i32 0, i32 2
  store i32 %700, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %702

701:                                              ; No predecessors!
  store i8 0, ptr %52, align 1, !tbaa !18
  br label %687, !llvm.loop !57

702:                                              ; preds = %693, %692
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  %703 = load i32, ptr %12, align 4
  switch i32 %703, label %706 [
    i32 120, label %704
  ]

704:                                              ; preds = %702
  br label %705

705:                                              ; preds = %704
  store i8 0, ptr %52, align 1, !tbaa !18
  br label %678, !llvm.loop !58

706:                                              ; preds = %702, %681
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #6
  %707 = load i32, ptr %12, align 4
  switch i32 %707, label %1509 [
    i32 117, label %708
  ]

708:                                              ; preds = %706
  br label %1507

709:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #6
  store i8 1, ptr %55, align 1, !tbaa !18
  br label %710

710:                                              ; preds = %751, %709
  %711 = load i8, ptr %55, align 1, !tbaa !18, !range !20, !noundef !21
  %712 = trunc i8 %711 to i1
  br i1 %712, label %714, label %713

713:                                              ; preds = %710
  store i32 123, ptr %12, align 4
  br label %752

714:                                              ; preds = %710
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  %715 = load ptr, ptr %44, align 8, !tbaa !5
  %716 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %715)
  store ptr %716, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  %717 = load ptr, ptr %45, align 8, !tbaa !5
  %718 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %717)
  store ptr %718, ptr %57, align 8, !tbaa !5
  br label %719

719:                                              ; preds = %747, %714
  %720 = load ptr, ptr %56, align 8, !tbaa !5
  %721 = load ptr, ptr %57, align 8, !tbaa !5
  %722 = load i8, ptr %55, align 1, !tbaa !18, !range !20, !noundef !21
  %723 = trunc i8 %722 to i1
  br i1 %723, label %725, label %724

724:                                              ; preds = %719
  store i32 126, ptr %12, align 4
  br label %748

725:                                              ; preds = %719
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  %726 = load ptr, ptr %56, align 8, !tbaa !5
  %727 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %726, i32 0, i32 0
  %728 = load ptr, ptr %7, align 8, !tbaa !5
  %729 = load ptr, ptr %57, align 8, !tbaa !5
  %730 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %729, i32 0, i32 0
  %731 = load ptr, ptr %9, align 8, !tbaa !5
  %732 = call noundef i32 @_ZNK3HIR4Path25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(88) %727, ptr noundef nonnull align 8 dereferenceable(8) %728, ptr noundef nonnull align 8 dereferenceable(88) %730, ptr noundef nonnull align 8 dereferenceable(8) %731)
  store i32 %732, ptr %58, align 4, !tbaa !59
  %733 = load i32, ptr %58, align 4, !tbaa !59
  %734 = icmp eq i32 %733, 2
  br i1 %734, label %735, label %745

735:                                              ; preds = %725
  %736 = load ptr, ptr %56, align 8, !tbaa !5
  %737 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %736, i32 0, i32 1
  %738 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %737)
  br i1 %738, label %743, label %739

739:                                              ; preds = %735
  %740 = load ptr, ptr %57, align 8, !tbaa !5
  %741 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %740, i32 0, i32 1
  %742 = call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %741)
  br i1 %742, label %743, label %744

743:                                              ; preds = %739, %735
  store i32 1, ptr %58, align 4, !tbaa !59
  br label %744

744:                                              ; preds = %743, %739
  br label %745

745:                                              ; preds = %744, %725
  %746 = load i32, ptr %58, align 4, !tbaa !59
  store i32 %746, ptr %5, align 4
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  br label %748

747:                                              ; No predecessors!
  store i8 0, ptr %55, align 1, !tbaa !18
  br label %719, !llvm.loop !61

748:                                              ; preds = %745, %724
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  %749 = load i32, ptr %12, align 4
  switch i32 %749, label %752 [
    i32 126, label %750
  ]

750:                                              ; preds = %748
  br label %751

751:                                              ; preds = %750
  store i8 0, ptr %55, align 1, !tbaa !18
  br label %710, !llvm.loop !62

752:                                              ; preds = %748, %713
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #6
  %753 = load i32, ptr %12, align 4
  switch i32 %753, label %1509 [
    i32 123, label %754
  ]

754:                                              ; preds = %752
  br label %1507

755:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #6
  store i8 1, ptr %59, align 1, !tbaa !18
  br label %756

756:                                              ; preds = %799, %755
  %757 = load i8, ptr %59, align 1, !tbaa !18, !range !20, !noundef !21
  %758 = trunc i8 %757 to i1
  br i1 %758, label %760, label %759

759:                                              ; preds = %756
  store i32 129, ptr %12, align 4
  br label %800

760:                                              ; preds = %756
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #6
  %761 = load ptr, ptr %44, align 8, !tbaa !5
  %762 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %761)
  store ptr %762, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #6
  %763 = load ptr, ptr %45, align 8, !tbaa !5
  %764 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %763)
  store ptr %764, ptr %61, align 8, !tbaa !5
  br label %765

765:                                              ; preds = %795, %760
  %766 = load ptr, ptr %60, align 8, !tbaa !5
  %767 = load ptr, ptr %61, align 8, !tbaa !5
  %768 = load i8, ptr %59, align 1, !tbaa !18, !range !20, !noundef !21
  %769 = trunc i8 %768 to i1
  br i1 %769, label %771, label %770

770:                                              ; preds = %765
  store i32 132, ptr %12, align 4
  br label %796

771:                                              ; preds = %765
  %772 = load ptr, ptr %60, align 8, !tbaa !5
  %773 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %772, i32 0, i32 1
  %774 = load i32, ptr %773, align 8, !tbaa !11
  %775 = load ptr, ptr %61, align 8, !tbaa !5
  %776 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %775, i32 0, i32 1
  %777 = load i32, ptr %776, align 8, !tbaa !11
  %778 = icmp ne i32 %774, %777
  br i1 %778, label %779, label %794

779:                                              ; preds = %771
  %780 = load ptr, ptr %60, align 8, !tbaa !5
  %781 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %780, i32 0, i32 1
  %782 = load i32, ptr %781, align 8, !tbaa !11
  %783 = lshr i32 %782, 8
  %784 = icmp eq i32 %783, 2
  br i1 %784, label %785, label %786

785:                                              ; preds = %779
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %796

786:                                              ; preds = %779
  %787 = load ptr, ptr %61, align 8, !tbaa !5
  %788 = getelementptr inbounds %"struct.HIR::GenericRef", ptr %787, i32 0, i32 1
  %789 = load i32, ptr %788, align 8, !tbaa !11
  %790 = lshr i32 %789, 8
  %791 = icmp eq i32 %790, 2
  br i1 %791, label %792, label %793

792:                                              ; preds = %786
  store i32 1, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %796

793:                                              ; preds = %786
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %796

794:                                              ; preds = %771
  store i32 0, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %796

795:                                              ; No predecessors!
  store i8 0, ptr %59, align 1, !tbaa !18
  br label %765, !llvm.loop !63

796:                                              ; preds = %794, %793, %792, %785, %770
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  %797 = load i32, ptr %12, align 4
  switch i32 %797, label %800 [
    i32 132, label %798
  ]

798:                                              ; preds = %796
  br label %799

799:                                              ; preds = %798
  store i8 0, ptr %59, align 1, !tbaa !18
  br label %756, !llvm.loop !64

800:                                              ; preds = %796, %759
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #6
  %801 = load i32, ptr %12, align 4
  switch i32 %801, label %1509 [
    i32 129, label %802
  ]

802:                                              ; preds = %800
  br label %1507

803:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #6
  store i8 1, ptr %62, align 1, !tbaa !18
  br label %804

804:                                              ; preds = %886, %803
  %805 = load i8, ptr %62, align 1, !tbaa !18, !range !20, !noundef !21
  %806 = trunc i8 %805 to i1
  br i1 %806, label %808, label %807

807:                                              ; preds = %804
  store i32 135, ptr %12, align 4
  br label %887

808:                                              ; preds = %804
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #6
  %809 = load ptr, ptr %44, align 8, !tbaa !5
  %810 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %809)
  store ptr %810, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #6
  %811 = load ptr, ptr %45, align 8, !tbaa !5
  %812 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %811)
  store ptr %812, ptr %64, align 8, !tbaa !5
  br label %813

813:                                              ; preds = %882, %808
  %814 = load ptr, ptr %63, align 8, !tbaa !5
  %815 = load ptr, ptr %64, align 8, !tbaa !5
  %816 = load i8, ptr %62, align 1, !tbaa !18, !range !20, !noundef !21
  %817 = trunc i8 %816 to i1
  br i1 %817, label %819, label %818

818:                                              ; preds = %813
  store i32 138, ptr %12, align 4
  br label %883

819:                                              ; preds = %813
  %820 = load ptr, ptr %63, align 8, !tbaa !5
  %821 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %820, i32 0, i32 1
  %822 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %821) #6
  %823 = load ptr, ptr %64, align 8, !tbaa !5
  %824 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %823, i32 0, i32 1
  %825 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %824) #6
  %826 = icmp ne i64 %822, %825
  br i1 %826, label %827, label %828

827:                                              ; preds = %819
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %883

828:                                              ; preds = %819
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #6
  %829 = load ptr, ptr %63, align 8, !tbaa !5
  %830 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %829, i32 0, i32 0
  %831 = load ptr, ptr %7, align 8, !tbaa !5
  %832 = load ptr, ptr %64, align 8, !tbaa !5
  %833 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %832, i32 0, i32 0
  %834 = load ptr, ptr %9, align 8, !tbaa !5
  %835 = call noundef i32 @_ZNK3HIR9TraitPath25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(144) %830, ptr noundef nonnull align 8 dereferenceable(8) %831, ptr noundef nonnull align 8 dereferenceable(144) %833, ptr noundef nonnull align 8 dereferenceable(8) %834)
  store i32 %835, ptr %65, align 4, !tbaa !59
  %836 = load i32, ptr %65, align 4, !tbaa !59
  %837 = icmp eq i32 %836, 2
  br i1 %837, label %838, label %840

838:                                              ; preds = %828
  %839 = load i32, ptr %65, align 4, !tbaa !59
  store i32 %839, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %881

840:                                              ; preds = %828
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #6
  store i32 0, ptr %66, align 4, !tbaa !65
  br label %841

841:                                              ; preds = %874, %840
  %842 = load i32, ptr %66, align 4, !tbaa !65
  %843 = zext i32 %842 to i64
  %844 = load ptr, ptr %63, align 8, !tbaa !5
  %845 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %844, i32 0, i32 1
  %846 = call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %845) #6
  %847 = icmp ult i64 %843, %846
  br i1 %847, label %849, label %848

848:                                              ; preds = %841
  store i32 141, ptr %12, align 4
  br label %877

849:                                              ; preds = %841
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #6
  %850 = load ptr, ptr %63, align 8, !tbaa !5
  %851 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %850, i32 0, i32 1
  %852 = load i32, ptr %66, align 4, !tbaa !65
  %853 = zext i32 %852 to i64
  %854 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %851, i64 noundef %853) #6
  %855 = load ptr, ptr %7, align 8, !tbaa !5
  %856 = load ptr, ptr %64, align 8, !tbaa !5
  %857 = getelementptr inbounds %"struct.HIR::TypeData_TraitObject", ptr %856, i32 0, i32 1
  %858 = load i32, ptr %66, align 4, !tbaa !65
  %859 = zext i32 %858 to i64
  %860 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %857, i64 noundef %859) #6
  %861 = load ptr, ptr %9, align 8, !tbaa !5
  %862 = call noundef i32 @_ZNK3HIR11GenericPath25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(32) %854, ptr noundef nonnull align 8 dereferenceable(8) %855, ptr noundef nonnull align 8 dereferenceable(32) %860, ptr noundef nonnull align 8 dereferenceable(8) %861)
  store i32 %862, ptr %67, align 4, !tbaa !59
  %863 = load i32, ptr %67, align 4, !tbaa !59
  %864 = icmp eq i32 %863, 2
  br i1 %864, label %865, label %866

865:                                              ; preds = %849
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %871

866:                                              ; preds = %849
  %867 = load i32, ptr %67, align 4, !tbaa !59
  %868 = icmp eq i32 %867, 1
  br i1 %868, label %869, label %870

869:                                              ; preds = %866
  store i32 1, ptr %65, align 4, !tbaa !59
  br label %870

870:                                              ; preds = %869, %866
  store i32 0, ptr %12, align 4
  br label %871

871:                                              ; preds = %870, %865
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #6
  %872 = load i32, ptr %12, align 4
  switch i32 %872, label %877 [
    i32 0, label %873
  ]

873:                                              ; preds = %871
  br label %874

874:                                              ; preds = %873
  %875 = load i32, ptr %66, align 4, !tbaa !65
  %876 = add i32 %875, 1
  store i32 %876, ptr %66, align 4, !tbaa !65
  br label %841, !llvm.loop !66

877:                                              ; preds = %871, %848
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #6
  %878 = load i32, ptr %12, align 4
  switch i32 %878, label %881 [
    i32 141, label %879
  ]

879:                                              ; preds = %877
  %880 = load i32, ptr %65, align 4, !tbaa !59
  store i32 %880, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %881

881:                                              ; preds = %879, %877, %838
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #6
  br label %883

882:                                              ; No predecessors!
  store i8 0, ptr %62, align 1, !tbaa !18
  br label %813, !llvm.loop !67

883:                                              ; preds = %881, %827, %818
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #6
  %884 = load i32, ptr %12, align 4
  switch i32 %884, label %887 [
    i32 138, label %885
  ]

885:                                              ; preds = %883
  br label %886

886:                                              ; preds = %885
  store i8 0, ptr %62, align 1, !tbaa !18
  br label %804, !llvm.loop !68

887:                                              ; preds = %883, %807
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #6
  %888 = load i32, ptr %12, align 4
  switch i32 %888, label %1509 [
    i32 135, label %889
  ]

889:                                              ; preds = %887
  br label %1507

890:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %68) #6
  store i8 1, ptr %68, align 1, !tbaa !18
  br label %891

891:                                              ; preds = %1056, %890
  %892 = load i8, ptr %68, align 1, !tbaa !18, !range !20, !noundef !21
  %893 = trunc i8 %892 to i1
  br i1 %893, label %895, label %894

894:                                              ; preds = %891
  store i32 144, ptr %12, align 4
  br label %1057

895:                                              ; preds = %891
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #6
  %896 = load ptr, ptr %44, align 8, !tbaa !5
  %897 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %896)
  store ptr %897, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #6
  %898 = load ptr, ptr %45, align 8, !tbaa !5
  %899 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %898)
  store ptr %899, ptr %70, align 8, !tbaa !5
  br label %900

900:                                              ; preds = %1052, %895
  %901 = load ptr, ptr %69, align 8, !tbaa !5
  %902 = load ptr, ptr %70, align 8, !tbaa !5
  %903 = load i8, ptr %68, align 1, !tbaa !18, !range !20, !noundef !21
  %904 = trunc i8 %903 to i1
  br i1 %904, label %906, label %905

905:                                              ; preds = %900
  store i32 147, ptr %12, align 4
  br label %1053

906:                                              ; preds = %900
  %907 = load ptr, ptr %69, align 8, !tbaa !5
  %908 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %907, i32 0, i32 3
  %909 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %908)
  %910 = load ptr, ptr %70, align 8, !tbaa !5
  %911 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %910, i32 0, i32 3
  %912 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %911)
  %913 = icmp ne i32 %909, %912
  br i1 %913, label %914, label %915

914:                                              ; preds = %906
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1053

915:                                              ; preds = %906
  call void @llvm.lifetime.start.p0(i64 1, ptr %71) #6
  store i8 1, ptr %71, align 1, !tbaa !18
  br label %916

916:                                              ; preds = %1048, %915
  %917 = load i8, ptr %71, align 1, !tbaa !18, !range !20, !noundef !21
  %918 = trunc i8 %917 to i1
  br i1 %918, label %920, label %919

919:                                              ; preds = %916
  store i32 150, ptr %12, align 4
  br label %1049

920:                                              ; preds = %916
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #6
  %921 = load ptr, ptr %69, align 8, !tbaa !5
  %922 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %921, i32 0, i32 3
  store ptr %922, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #6
  %923 = load ptr, ptr %70, align 8, !tbaa !5
  %924 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %923, i32 0, i32 3
  store ptr %924, ptr %73, align 8, !tbaa !5
  br label %925

925:                                              ; preds = %1044, %920
  %926 = load i8, ptr %71, align 1, !tbaa !18, !range !20, !noundef !21
  %927 = trunc i8 %926 to i1
  br i1 %927, label %929, label %928

928:                                              ; preds = %925
  store i32 153, ptr %12, align 4
  br label %1045

929:                                              ; preds = %925
  %930 = load ptr, ptr %72, align 8, !tbaa !5
  %931 = call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %930)
  switch i32 %931, label %1043 [
    i32 0, label %932
    i32 2, label %933
    i32 3, label %963
    i32 1, label %1002
  ]

932:                                              ; preds = %929
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 1480, ptr noundef @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #7
  unreachable

933:                                              ; preds = %929
  call void @llvm.lifetime.start.p0(i64 1, ptr %74) #6
  store i8 1, ptr %74, align 1, !tbaa !18
  br label %934

934:                                              ; preds = %959, %933
  %935 = load i8, ptr %74, align 1, !tbaa !18, !range !20, !noundef !21
  %936 = trunc i8 %935 to i1
  br i1 %936, label %938, label %937

937:                                              ; preds = %934
  store i32 157, ptr %12, align 4
  br label %960

938:                                              ; preds = %934
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #6
  %939 = load ptr, ptr %72, align 8, !tbaa !5
  %940 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %939)
  store ptr %940, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #6
  %941 = load ptr, ptr %73, align 8, !tbaa !5
  %942 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %941)
  store ptr %942, ptr %76, align 8, !tbaa !5
  br label %943

943:                                              ; preds = %955, %938
  %944 = load ptr, ptr %75, align 8, !tbaa !5
  %945 = load ptr, ptr %76, align 8, !tbaa !5
  %946 = load i8, ptr %74, align 1, !tbaa !18, !range !20, !noundef !21
  %947 = trunc i8 %946 to i1
  br i1 %947, label %949, label %948

948:                                              ; preds = %943
  store i32 160, ptr %12, align 4
  br label %956

949:                                              ; preds = %943
  %950 = load ptr, ptr %75, align 8, !tbaa !5
  %951 = load ptr, ptr %7, align 8, !tbaa !5
  %952 = load ptr, ptr %76, align 8, !tbaa !5
  %953 = load ptr, ptr %9, align 8, !tbaa !5
  %954 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %950, ptr noundef nonnull align 8 dereferenceable(8) %951, ptr noundef nonnull align 8 dereferenceable(8) %952, ptr noundef nonnull align 8 dereferenceable(8) %953)
  store i32 %954, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %956

955:                                              ; No predecessors!
  store i8 0, ptr %74, align 1, !tbaa !18
  br label %943, !llvm.loop !69

956:                                              ; preds = %949, %948
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #6
  %957 = load i32, ptr %12, align 4
  switch i32 %957, label %960 [
    i32 160, label %958
  ]

958:                                              ; preds = %956
  br label %959

959:                                              ; preds = %958
  store i8 0, ptr %74, align 1, !tbaa !18
  br label %934, !llvm.loop !70

960:                                              ; preds = %956, %937
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #6
  %961 = load i32, ptr %12, align 4
  switch i32 %961, label %1045 [
    i32 157, label %962
  ]

962:                                              ; preds = %960
  br label %1043

963:                                              ; preds = %929
  call void @llvm.lifetime.start.p0(i64 1, ptr %77) #6
  store i8 1, ptr %77, align 1, !tbaa !18
  br label %964

964:                                              ; preds = %998, %963
  %965 = load i8, ptr %77, align 1, !tbaa !18, !range !20, !noundef !21
  %966 = trunc i8 %965 to i1
  br i1 %966, label %968, label %967

967:                                              ; preds = %964
  store i32 163, ptr %12, align 4
  br label %999

968:                                              ; preds = %964
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #6
  %969 = load ptr, ptr %72, align 8, !tbaa !5
  %970 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %969)
  store ptr %970, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #6
  %971 = load ptr, ptr %73, align 8, !tbaa !5
  %972 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %971)
  store ptr %972, ptr %79, align 8, !tbaa !5
  br label %973

973:                                              ; preds = %994, %968
  %974 = load ptr, ptr %78, align 8, !tbaa !5
  %975 = load ptr, ptr %79, align 8, !tbaa !5
  %976 = load i8, ptr %77, align 1, !tbaa !18, !range !20, !noundef !21
  %977 = trunc i8 %976 to i1
  br i1 %977, label %979, label %978

978:                                              ; preds = %973
  store i32 166, ptr %12, align 4
  br label %995

979:                                              ; preds = %973
  %980 = load ptr, ptr %78, align 8, !tbaa !5
  %981 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %980, i32 0, i32 1
  %982 = load ptr, ptr %79, align 8, !tbaa !5
  %983 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %982, i32 0, i32 1
  %984 = call noundef zeroext i1 @_ZStneIN3HIR30TypeData_ErasedType_AliasInnerES1_EbRKSt10shared_ptrIT_ERKS2_IT0_E(ptr noundef nonnull align 8 dereferenceable(16) %981, ptr noundef nonnull align 8 dereferenceable(16) %983) #6
  br i1 %984, label %985, label %986

985:                                              ; preds = %979
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %995

986:                                              ; preds = %979
  %987 = load ptr, ptr %78, align 8, !tbaa !5
  %988 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %987, i32 0, i32 0
  %989 = load ptr, ptr %7, align 8, !tbaa !5
  %990 = load ptr, ptr %79, align 8, !tbaa !5
  %991 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", ptr %990, i32 0, i32 0
  %992 = load ptr, ptr %9, align 8, !tbaa !5
  %993 = call noundef i32 @_ZNK3HIR10PathParams25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(24) %988, ptr noundef nonnull align 8 dereferenceable(8) %989, ptr noundef nonnull align 8 dereferenceable(24) %991, ptr noundef nonnull align 8 dereferenceable(8) %992)
  store i32 %993, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %995

994:                                              ; No predecessors!
  store i8 0, ptr %77, align 1, !tbaa !18
  br label %973, !llvm.loop !71

995:                                              ; preds = %986, %985, %978
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #6
  %996 = load i32, ptr %12, align 4
  switch i32 %996, label %999 [
    i32 166, label %997
  ]

997:                                              ; preds = %995
  br label %998

998:                                              ; preds = %997
  store i8 0, ptr %77, align 1, !tbaa !18
  br label %964, !llvm.loop !72

999:                                              ; preds = %995, %967
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #6
  %1000 = load i32, ptr %12, align 4
  switch i32 %1000, label %1045 [
    i32 163, label %1001
  ]

1001:                                             ; preds = %999
  br label %1043

1002:                                             ; preds = %929
  call void @llvm.lifetime.start.p0(i64 1, ptr %80) #6
  store i8 1, ptr %80, align 1, !tbaa !18
  br label %1003

1003:                                             ; preds = %1039, %1002
  %1004 = load i8, ptr %80, align 1, !tbaa !18, !range !20, !noundef !21
  %1005 = trunc i8 %1004 to i1
  br i1 %1005, label %1007, label %1006

1006:                                             ; preds = %1003
  store i32 169, ptr %12, align 4
  br label %1040

1007:                                             ; preds = %1003
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #6
  %1008 = load ptr, ptr %72, align 8, !tbaa !5
  %1009 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %1008)
  store ptr %1009, ptr %81, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #6
  %1010 = load ptr, ptr %73, align 8, !tbaa !5
  %1011 = call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %1010)
  store ptr %1011, ptr %82, align 8, !tbaa !5
  br label %1012

1012:                                             ; preds = %1035, %1007
  %1013 = load ptr, ptr %81, align 8, !tbaa !5
  %1014 = load ptr, ptr %82, align 8, !tbaa !5
  %1015 = load i8, ptr %80, align 1, !tbaa !18, !range !20, !noundef !21
  %1016 = trunc i8 %1015 to i1
  br i1 %1016, label %1018, label %1017

1017:                                             ; preds = %1012
  store i32 172, ptr %12, align 4
  br label %1036

1018:                                             ; preds = %1012
  %1019 = load ptr, ptr %81, align 8, !tbaa !5
  %1020 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %1019, i32 0, i32 1
  %1021 = load i32, ptr %1020, align 8, !tbaa !73
  %1022 = load ptr, ptr %82, align 8, !tbaa !5
  %1023 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %1022, i32 0, i32 1
  %1024 = load i32, ptr %1023, align 8, !tbaa !73
  %1025 = icmp ne i32 %1021, %1024
  br i1 %1025, label %1026, label %1027

1026:                                             ; preds = %1018
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1036

1027:                                             ; preds = %1018
  %1028 = load ptr, ptr %81, align 8, !tbaa !5
  %1029 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %1028, i32 0, i32 0
  %1030 = load ptr, ptr %7, align 8, !tbaa !5
  %1031 = load ptr, ptr %82, align 8, !tbaa !5
  %1032 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType_Inner::Data_Fcn", ptr %1031, i32 0, i32 0
  %1033 = load ptr, ptr %9, align 8, !tbaa !5
  %1034 = call noundef i32 @_ZNK3HIR4Path25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(88) %1029, ptr noundef nonnull align 8 dereferenceable(8) %1030, ptr noundef nonnull align 8 dereferenceable(88) %1032, ptr noundef nonnull align 8 dereferenceable(8) %1033)
  store i32 %1034, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1036

1035:                                             ; No predecessors!
  store i8 0, ptr %80, align 1, !tbaa !18
  br label %1012, !llvm.loop !78

1036:                                             ; preds = %1027, %1026, %1017
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #6
  %1037 = load i32, ptr %12, align 4
  switch i32 %1037, label %1040 [
    i32 172, label %1038
  ]

1038:                                             ; preds = %1036
  br label %1039

1039:                                             ; preds = %1038
  store i8 0, ptr %80, align 1, !tbaa !18
  br label %1003, !llvm.loop !79

1040:                                             ; preds = %1036, %1006
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #6
  %1041 = load i32, ptr %12, align 4
  switch i32 %1041, label %1045 [
    i32 169, label %1042
  ]

1042:                                             ; preds = %1040
  br label %1043

1043:                                             ; preds = %1042, %1001, %962, %929
  br label %1044

1044:                                             ; preds = %1043
  store i8 0, ptr %71, align 1, !tbaa !18
  br label %925, !llvm.loop !80

1045:                                             ; preds = %1040, %999, %960, %928
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #6
  %1046 = load i32, ptr %12, align 4
  switch i32 %1046, label %1049 [
    i32 153, label %1047
  ]

1047:                                             ; preds = %1045
  br label %1048

1048:                                             ; preds = %1047
  store i8 0, ptr %71, align 1, !tbaa !18
  br label %916, !llvm.loop !81

1049:                                             ; preds = %1045, %919
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #6
  %1050 = load i32, ptr %12, align 4
  switch i32 %1050, label %1053 [
    i32 150, label %1051
  ]

1051:                                             ; preds = %1049
  store i32 0, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1053

1052:                                             ; No predecessors!
  store i8 0, ptr %68, align 1, !tbaa !18
  br label %900, !llvm.loop !82

1053:                                             ; preds = %1051, %1049, %914, %905
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #6
  %1054 = load i32, ptr %12, align 4
  switch i32 %1054, label %1057 [
    i32 147, label %1055
  ]

1055:                                             ; preds = %1053
  br label %1056

1056:                                             ; preds = %1055
  store i8 0, ptr %68, align 1, !tbaa !18
  br label %891, !llvm.loop !83

1057:                                             ; preds = %1053, %894
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #6
  %1058 = load i32, ptr %12, align 4
  switch i32 %1058, label %1509 [
    i32 144, label %1059
  ]

1059:                                             ; preds = %1057
  br label %1507

1060:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %83) #6
  store i8 1, ptr %83, align 1, !tbaa !18
  br label %1061

1061:                                             ; preds = %1123, %1060
  %1062 = load i8, ptr %83, align 1, !tbaa !18, !range !20, !noundef !21
  %1063 = trunc i8 %1062 to i1
  br i1 %1063, label %1065, label %1064

1064:                                             ; preds = %1061
  store i32 175, ptr %12, align 4
  br label %1124

1065:                                             ; preds = %1061
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #6
  %1066 = load ptr, ptr %44, align 8, !tbaa !5
  %1067 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %1066)
  store ptr %1067, ptr %84, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #6
  %1068 = load ptr, ptr %45, align 8, !tbaa !5
  %1069 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %1068)
  store ptr %1069, ptr %85, align 8, !tbaa !5
  br label %1070

1070:                                             ; preds = %1119, %1065
  %1071 = load ptr, ptr %84, align 8, !tbaa !5
  %1072 = load ptr, ptr %85, align 8, !tbaa !5
  %1073 = load i8, ptr %83, align 1, !tbaa !18, !range !20, !noundef !21
  %1074 = trunc i8 %1073 to i1
  br i1 %1074, label %1076, label %1075

1075:                                             ; preds = %1070
  store i32 178, ptr %12, align 4
  br label %1120

1076:                                             ; preds = %1070
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #6
  store i32 0, ptr %86, align 4, !tbaa !59
  %1077 = load ptr, ptr %84, align 8, !tbaa !5
  %1078 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1077, i32 0, i32 1
  %1079 = call noundef zeroext i1 @_ZNK3HIR9ArraySize14is_UnevaluatedEv(ptr noundef nonnull align 8 dereferenceable(32) %1078)
  br i1 %1079, label %1080, label %1087

1080:                                             ; preds = %1076
  %1081 = load ptr, ptr %84, align 8, !tbaa !5
  %1082 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1081, i32 0, i32 1
  %1083 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR9ArraySize14as_UnevaluatedEv(ptr noundef nonnull align 8 dereferenceable(32) %1082)
  %1084 = call noundef zeroext i1 @_ZNK3HIR12ConstGeneric8is_InferEv(ptr noundef nonnull align 8 dereferenceable(24) %1083)
  br i1 %1084, label %1085, label %1087

1085:                                             ; preds = %1080
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #6
  store i32 1, ptr %87, align 4, !tbaa !59
  %1086 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %86, ptr noundef nonnull align 4 dereferenceable(4) %87)
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #6
  br label %1108

1087:                                             ; preds = %1080, %1076
  %1088 = load ptr, ptr %85, align 8, !tbaa !5
  %1089 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1088, i32 0, i32 1
  %1090 = call noundef zeroext i1 @_ZNK3HIR9ArraySize14is_UnevaluatedEv(ptr noundef nonnull align 8 dereferenceable(32) %1089)
  br i1 %1090, label %1091, label %1098

1091:                                             ; preds = %1087
  %1092 = load ptr, ptr %85, align 8, !tbaa !5
  %1093 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1092, i32 0, i32 1
  %1094 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR9ArraySize14as_UnevaluatedEv(ptr noundef nonnull align 8 dereferenceable(32) %1093)
  %1095 = call noundef zeroext i1 @_ZNK3HIR12ConstGeneric8is_InferEv(ptr noundef nonnull align 8 dereferenceable(24) %1094)
  br i1 %1095, label %1096, label %1098

1096:                                             ; preds = %1091
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #6
  store i32 1, ptr %88, align 4, !tbaa !59
  %1097 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %86, ptr noundef nonnull align 4 dereferenceable(4) %88)
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #6
  br label %1107

1098:                                             ; preds = %1091, %1087
  %1099 = load ptr, ptr %84, align 8, !tbaa !5
  %1100 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1099, i32 0, i32 1
  %1101 = load ptr, ptr %85, align 8, !tbaa !5
  %1102 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1101, i32 0, i32 1
  %1103 = call noundef zeroext i1 @_ZNK3HIR9ArraySizeneERKS0_(ptr noundef nonnull align 8 dereferenceable(32) %1100, ptr noundef nonnull align 8 dereferenceable(32) %1102)
  br i1 %1103, label %1104, label %1105

1104:                                             ; preds = %1098
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1118

1105:                                             ; preds = %1098
  br label %1106

1106:                                             ; preds = %1105
  br label %1107

1107:                                             ; preds = %1106, %1096
  br label %1108

1108:                                             ; preds = %1107, %1085
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #6
  %1109 = load ptr, ptr %84, align 8, !tbaa !5
  %1110 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1109, i32 0, i32 0
  %1111 = load ptr, ptr %7, align 8, !tbaa !5
  %1112 = load ptr, ptr %85, align 8, !tbaa !5
  %1113 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1112, i32 0, i32 0
  %1114 = load ptr, ptr %9, align 8, !tbaa !5
  %1115 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %1110, ptr noundef nonnull align 8 dereferenceable(8) %1111, ptr noundef nonnull align 8 dereferenceable(8) %1113, ptr noundef nonnull align 8 dereferenceable(8) %1114)
  store i32 %1115, ptr %89, align 4, !tbaa !59
  %1116 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %86, ptr noundef nonnull align 4 dereferenceable(4) %89)
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #6
  %1117 = load i32, ptr %86, align 4, !tbaa !59
  store i32 %1117, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1118

1118:                                             ; preds = %1108, %1104
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #6
  br label %1120

1119:                                             ; No predecessors!
  store i8 0, ptr %83, align 1, !tbaa !18
  br label %1070, !llvm.loop !84

1120:                                             ; preds = %1118, %1075
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #6
  %1121 = load i32, ptr %12, align 4
  switch i32 %1121, label %1124 [
    i32 178, label %1122
  ]

1122:                                             ; preds = %1120
  br label %1123

1123:                                             ; preds = %1122
  store i8 0, ptr %83, align 1, !tbaa !18
  br label %1061, !llvm.loop !85

1124:                                             ; preds = %1120, %1064
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #6
  %1125 = load i32, ptr %12, align 4
  switch i32 %1125, label %1509 [
    i32 175, label %1126
  ]

1126:                                             ; preds = %1124
  br label %1507

1127:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %90) #6
  store i8 1, ptr %90, align 1, !tbaa !18
  br label %1128

1128:                                             ; preds = %1155, %1127
  %1129 = load i8, ptr %90, align 1, !tbaa !18, !range !20, !noundef !21
  %1130 = trunc i8 %1129 to i1
  br i1 %1130, label %1132, label %1131

1131:                                             ; preds = %1128
  store i32 181, ptr %12, align 4
  br label %1156

1132:                                             ; preds = %1128
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #6
  %1133 = load ptr, ptr %44, align 8, !tbaa !5
  %1134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %1133)
  store ptr %1134, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #6
  %1135 = load ptr, ptr %45, align 8, !tbaa !5
  %1136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %1135)
  store ptr %1136, ptr %92, align 8, !tbaa !5
  br label %1137

1137:                                             ; preds = %1151, %1132
  %1138 = load ptr, ptr %91, align 8, !tbaa !5
  %1139 = load ptr, ptr %92, align 8, !tbaa !5
  %1140 = load i8, ptr %90, align 1, !tbaa !18, !range !20, !noundef !21
  %1141 = trunc i8 %1140 to i1
  br i1 %1141, label %1143, label %1142

1142:                                             ; preds = %1137
  store i32 184, ptr %12, align 4
  br label %1152

1143:                                             ; preds = %1137
  %1144 = load ptr, ptr %91, align 8, !tbaa !5
  %1145 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %1144, i32 0, i32 0
  %1146 = load ptr, ptr %7, align 8, !tbaa !5
  %1147 = load ptr, ptr %92, align 8, !tbaa !5
  %1148 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %1147, i32 0, i32 0
  %1149 = load ptr, ptr %9, align 8, !tbaa !5
  %1150 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %1145, ptr noundef nonnull align 8 dereferenceable(8) %1146, ptr noundef nonnull align 8 dereferenceable(8) %1148, ptr noundef nonnull align 8 dereferenceable(8) %1149)
  store i32 %1150, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1152

1151:                                             ; No predecessors!
  store i8 0, ptr %90, align 1, !tbaa !18
  br label %1137, !llvm.loop !86

1152:                                             ; preds = %1143, %1142
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #6
  %1153 = load i32, ptr %12, align 4
  switch i32 %1153, label %1156 [
    i32 184, label %1154
  ]

1154:                                             ; preds = %1152
  br label %1155

1155:                                             ; preds = %1154
  store i8 0, ptr %90, align 1, !tbaa !18
  br label %1128, !llvm.loop !87

1156:                                             ; preds = %1152, %1131
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #6
  %1157 = load i32, ptr %12, align 4
  switch i32 %1157, label %1509 [
    i32 181, label %1158
  ]

1158:                                             ; preds = %1156
  br label %1507

1159:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %93) #6
  store i8 1, ptr %93, align 1, !tbaa !18
  br label %1160

1160:                                             ; preds = %1225, %1159
  %1161 = load i8, ptr %93, align 1, !tbaa !18, !range !20, !noundef !21
  %1162 = trunc i8 %1161 to i1
  br i1 %1162, label %1164, label %1163

1163:                                             ; preds = %1160
  store i32 187, ptr %12, align 4
  br label %1226

1164:                                             ; preds = %1160
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #6
  %1165 = load ptr, ptr %44, align 8, !tbaa !5
  %1166 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %1165)
  store ptr %1166, ptr %94, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #6
  %1167 = load ptr, ptr %45, align 8, !tbaa !5
  %1168 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %1167)
  store ptr %1168, ptr %95, align 8, !tbaa !5
  br label %1169

1169:                                             ; preds = %1221, %1164
  %1170 = load ptr, ptr %94, align 8, !tbaa !5
  %1171 = load ptr, ptr %95, align 8, !tbaa !5
  %1172 = load i8, ptr %93, align 1, !tbaa !18, !range !20, !noundef !21
  %1173 = trunc i8 %1172 to i1
  br i1 %1173, label %1175, label %1174

1174:                                             ; preds = %1169
  store i32 190, ptr %12, align 4
  br label %1222

1175:                                             ; preds = %1169
  %1176 = load ptr, ptr %94, align 8, !tbaa !5
  %1177 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1176) #6
  %1178 = load ptr, ptr %95, align 8, !tbaa !5
  %1179 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1178) #6
  %1180 = icmp ne i64 %1177, %1179
  br i1 %1180, label %1181, label %1182

1181:                                             ; preds = %1175
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1222

1182:                                             ; preds = %1175
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #6
  store i32 0, ptr %96, align 4, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #6
  store i32 0, ptr %97, align 4, !tbaa !65
  br label %1183

1183:                                             ; preds = %1213, %1182
  %1184 = load i32, ptr %97, align 4, !tbaa !65
  %1185 = zext i32 %1184 to i64
  %1186 = load ptr, ptr %94, align 8, !tbaa !5
  %1187 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1186) #6
  %1188 = icmp ult i64 %1185, %1187
  br i1 %1188, label %1190, label %1189

1189:                                             ; preds = %1183
  store i32 193, ptr %12, align 4
  br label %1216

1190:                                             ; preds = %1183
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #6
  %1191 = load ptr, ptr %94, align 8, !tbaa !5
  %1192 = load i32, ptr %97, align 4, !tbaa !65
  %1193 = zext i32 %1192 to i64
  %1194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1191, i64 noundef %1193) #6
  %1195 = load ptr, ptr %7, align 8, !tbaa !5
  %1196 = load ptr, ptr %95, align 8, !tbaa !5
  %1197 = load i32, ptr %97, align 4, !tbaa !65
  %1198 = zext i32 %1197 to i64
  %1199 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1196, i64 noundef %1198) #6
  %1200 = load ptr, ptr %9, align 8, !tbaa !5
  %1201 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %1194, ptr noundef nonnull align 8 dereferenceable(8) %1195, ptr noundef nonnull align 8 dereferenceable(8) %1199, ptr noundef nonnull align 8 dereferenceable(8) %1200)
  store i32 %1201, ptr %98, align 4, !tbaa !59
  %1202 = load i32, ptr %98, align 4, !tbaa !59
  %1203 = icmp eq i32 %1202, 2
  br i1 %1203, label %1204, label %1205

1204:                                             ; preds = %1190
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1210

1205:                                             ; preds = %1190
  %1206 = load i32, ptr %98, align 4, !tbaa !59
  %1207 = icmp eq i32 %1206, 1
  br i1 %1207, label %1208, label %1209

1208:                                             ; preds = %1205
  store i32 1, ptr %96, align 4, !tbaa !59
  br label %1209

1209:                                             ; preds = %1208, %1205
  store i32 0, ptr %12, align 4
  br label %1210

1210:                                             ; preds = %1209, %1204
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #6
  %1211 = load i32, ptr %12, align 4
  switch i32 %1211, label %1216 [
    i32 0, label %1212
  ]

1212:                                             ; preds = %1210
  br label %1213

1213:                                             ; preds = %1212
  %1214 = load i32, ptr %97, align 4, !tbaa !65
  %1215 = add i32 %1214, 1
  store i32 %1215, ptr %97, align 4, !tbaa !65
  br label %1183, !llvm.loop !88

1216:                                             ; preds = %1210, %1189
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #6
  %1217 = load i32, ptr %12, align 4
  switch i32 %1217, label %1220 [
    i32 193, label %1218
  ]

1218:                                             ; preds = %1216
  %1219 = load i32, ptr %96, align 4, !tbaa !59
  store i32 %1219, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1220

1220:                                             ; preds = %1218, %1216
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #6
  br label %1222

1221:                                             ; No predecessors!
  store i8 0, ptr %93, align 1, !tbaa !18
  br label %1169, !llvm.loop !89

1222:                                             ; preds = %1220, %1181, %1174
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #6
  %1223 = load i32, ptr %12, align 4
  switch i32 %1223, label %1226 [
    i32 190, label %1224
  ]

1224:                                             ; preds = %1222
  br label %1225

1225:                                             ; preds = %1224
  store i8 0, ptr %93, align 1, !tbaa !18
  br label %1160, !llvm.loop !90

1226:                                             ; preds = %1222, %1163
  call void @llvm.lifetime.end.p0(i64 1, ptr %93) #6
  %1227 = load i32, ptr %12, align 4
  switch i32 %1227, label %1509 [
    i32 187, label %1228
  ]

1228:                                             ; preds = %1226
  br label %1507

1229:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %99) #6
  store i8 1, ptr %99, align 1, !tbaa !18
  br label %1230

1230:                                             ; preds = %1266, %1229
  %1231 = load i8, ptr %99, align 1, !tbaa !18, !range !20, !noundef !21
  %1232 = trunc i8 %1231 to i1
  br i1 %1232, label %1234, label %1233

1233:                                             ; preds = %1230
  store i32 196, ptr %12, align 4
  br label %1267

1234:                                             ; preds = %1230
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #6
  %1235 = load ptr, ptr %44, align 8, !tbaa !5
  %1236 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %1235)
  store ptr %1236, ptr %100, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #6
  %1237 = load ptr, ptr %45, align 8, !tbaa !5
  %1238 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %1237)
  store ptr %1238, ptr %101, align 8, !tbaa !5
  br label %1239

1239:                                             ; preds = %1262, %1234
  %1240 = load ptr, ptr %100, align 8, !tbaa !5
  %1241 = load ptr, ptr %101, align 8, !tbaa !5
  %1242 = load i8, ptr %99, align 1, !tbaa !18, !range !20, !noundef !21
  %1243 = trunc i8 %1242 to i1
  br i1 %1243, label %1245, label %1244

1244:                                             ; preds = %1239
  store i32 199, ptr %12, align 4
  br label %1263

1245:                                             ; preds = %1239
  %1246 = load ptr, ptr %100, align 8, !tbaa !5
  %1247 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %1246, i32 0, i32 1
  %1248 = load i32, ptr %1247, align 4, !tbaa !91
  %1249 = load ptr, ptr %101, align 8, !tbaa !5
  %1250 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %1249, i32 0, i32 1
  %1251 = load i32, ptr %1250, align 4, !tbaa !91
  %1252 = icmp ne i32 %1248, %1251
  br i1 %1252, label %1253, label %1254

1253:                                             ; preds = %1245
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1263

1254:                                             ; preds = %1245
  %1255 = load ptr, ptr %100, align 8, !tbaa !5
  %1256 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %1255, i32 0, i32 2
  %1257 = load ptr, ptr %7, align 8, !tbaa !5
  %1258 = load ptr, ptr %101, align 8, !tbaa !5
  %1259 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %1258, i32 0, i32 2
  %1260 = load ptr, ptr %9, align 8, !tbaa !5
  %1261 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %1256, ptr noundef nonnull align 8 dereferenceable(8) %1257, ptr noundef nonnull align 8 dereferenceable(8) %1259, ptr noundef nonnull align 8 dereferenceable(8) %1260)
  store i32 %1261, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1263

1262:                                             ; No predecessors!
  store i8 0, ptr %99, align 1, !tbaa !18
  br label %1239, !llvm.loop !96

1263:                                             ; preds = %1254, %1253, %1244
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #6
  %1264 = load i32, ptr %12, align 4
  switch i32 %1264, label %1267 [
    i32 199, label %1265
  ]

1265:                                             ; preds = %1263
  br label %1266

1266:                                             ; preds = %1265
  store i8 0, ptr %99, align 1, !tbaa !18
  br label %1230, !llvm.loop !97

1267:                                             ; preds = %1263, %1233
  call void @llvm.lifetime.end.p0(i64 1, ptr %99) #6
  %1268 = load i32, ptr %12, align 4
  switch i32 %1268, label %1509 [
    i32 196, label %1269
  ]

1269:                                             ; preds = %1267
  br label %1507

1270:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %102) #6
  store i8 1, ptr %102, align 1, !tbaa !18
  br label %1271

1271:                                             ; preds = %1307, %1270
  %1272 = load i8, ptr %102, align 1, !tbaa !18, !range !20, !noundef !21
  %1273 = trunc i8 %1272 to i1
  br i1 %1273, label %1275, label %1274

1274:                                             ; preds = %1271
  store i32 202, ptr %12, align 4
  br label %1308

1275:                                             ; preds = %1271
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #6
  %1276 = load ptr, ptr %44, align 8, !tbaa !5
  %1277 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %1276)
  store ptr %1277, ptr %103, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #6
  %1278 = load ptr, ptr %45, align 8, !tbaa !5
  %1279 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %1278)
  store ptr %1279, ptr %104, align 8, !tbaa !5
  br label %1280

1280:                                             ; preds = %1303, %1275
  %1281 = load ptr, ptr %103, align 8, !tbaa !5
  %1282 = load ptr, ptr %104, align 8, !tbaa !5
  %1283 = load i8, ptr %102, align 1, !tbaa !18, !range !20, !noundef !21
  %1284 = trunc i8 %1283 to i1
  br i1 %1284, label %1286, label %1285

1285:                                             ; preds = %1280
  store i32 205, ptr %12, align 4
  br label %1304

1286:                                             ; preds = %1280
  %1287 = load ptr, ptr %103, align 8, !tbaa !5
  %1288 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %1287, i32 0, i32 0
  %1289 = load i32, ptr %1288, align 8, !tbaa !98
  %1290 = load ptr, ptr %104, align 8, !tbaa !5
  %1291 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %1290, i32 0, i32 0
  %1292 = load i32, ptr %1291, align 8, !tbaa !98
  %1293 = icmp ne i32 %1289, %1292
  br i1 %1293, label %1294, label %1295

1294:                                             ; preds = %1286
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1304

1295:                                             ; preds = %1286
  %1296 = load ptr, ptr %103, align 8, !tbaa !5
  %1297 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %1296, i32 0, i32 1
  %1298 = load ptr, ptr %7, align 8, !tbaa !5
  %1299 = load ptr, ptr %104, align 8, !tbaa !5
  %1300 = getelementptr inbounds %"struct.HIR::TypeData::Data_Pointer", ptr %1299, i32 0, i32 1
  %1301 = load ptr, ptr %9, align 8, !tbaa !5
  %1302 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %1297, ptr noundef nonnull align 8 dereferenceable(8) %1298, ptr noundef nonnull align 8 dereferenceable(8) %1300, ptr noundef nonnull align 8 dereferenceable(8) %1301)
  store i32 %1302, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1304

1303:                                             ; No predecessors!
  store i8 0, ptr %102, align 1, !tbaa !18
  br label %1280, !llvm.loop !100

1304:                                             ; preds = %1295, %1294, %1285
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #6
  %1305 = load i32, ptr %12, align 4
  switch i32 %1305, label %1308 [
    i32 205, label %1306
  ]

1306:                                             ; preds = %1304
  br label %1307

1307:                                             ; preds = %1306
  store i8 0, ptr %102, align 1, !tbaa !18
  br label %1271, !llvm.loop !101

1308:                                             ; preds = %1304, %1274
  call void @llvm.lifetime.end.p0(i64 1, ptr %102) #6
  %1309 = load i32, ptr %12, align 4
  switch i32 %1309, label %1509 [
    i32 202, label %1310
  ]

1310:                                             ; preds = %1308
  br label %1507

1311:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %105) #6
  store i8 1, ptr %105, align 1, !tbaa !18
  br label %1312

1312:                                             ; preds = %1339, %1311
  %1313 = load i8, ptr %105, align 1, !tbaa !18, !range !20, !noundef !21
  %1314 = trunc i8 %1313 to i1
  br i1 %1314, label %1316, label %1315

1315:                                             ; preds = %1312
  store i32 208, ptr %12, align 4
  br label %1340

1316:                                             ; preds = %1312
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #6
  %1317 = load ptr, ptr %44, align 8, !tbaa !5
  %1318 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %1317)
  store ptr %1318, ptr %106, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #6
  %1319 = load ptr, ptr %45, align 8, !tbaa !5
  %1320 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %1319)
  store ptr %1320, ptr %107, align 8, !tbaa !5
  br label %1321

1321:                                             ; preds = %1335, %1316
  %1322 = load ptr, ptr %106, align 8, !tbaa !5
  %1323 = load ptr, ptr %107, align 8, !tbaa !5
  %1324 = load i8, ptr %105, align 1, !tbaa !18, !range !20, !noundef !21
  %1325 = trunc i8 %1324 to i1
  br i1 %1325, label %1327, label %1326

1326:                                             ; preds = %1321
  store i32 211, ptr %12, align 4
  br label %1336

1327:                                             ; preds = %1321
  %1328 = load ptr, ptr %106, align 8, !tbaa !5
  %1329 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %1328, i32 0, i32 0
  %1330 = load ptr, ptr %7, align 8, !tbaa !5
  %1331 = load ptr, ptr %107, align 8, !tbaa !5
  %1332 = getelementptr inbounds %"struct.HIR::TypeData::Data_NamedFunction", ptr %1331, i32 0, i32 0
  %1333 = load ptr, ptr %9, align 8, !tbaa !5
  %1334 = call noundef i32 @_ZNK3HIR4Path25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(88) %1329, ptr noundef nonnull align 8 dereferenceable(8) %1330, ptr noundef nonnull align 8 dereferenceable(88) %1332, ptr noundef nonnull align 8 dereferenceable(8) %1333)
  store i32 %1334, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1336

1335:                                             ; No predecessors!
  store i8 0, ptr %105, align 1, !tbaa !18
  br label %1321, !llvm.loop !102

1336:                                             ; preds = %1327, %1326
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #6
  %1337 = load i32, ptr %12, align 4
  switch i32 %1337, label %1340 [
    i32 211, label %1338
  ]

1338:                                             ; preds = %1336
  br label %1339

1339:                                             ; preds = %1338
  store i8 0, ptr %105, align 1, !tbaa !18
  br label %1312, !llvm.loop !103

1340:                                             ; preds = %1336, %1315
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #6
  %1341 = load i32, ptr %12, align 4
  switch i32 %1341, label %1509 [
    i32 208, label %1342
  ]

1342:                                             ; preds = %1340
  br label %1507

1343:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %108) #6
  store i8 1, ptr %108, align 1, !tbaa !18
  br label %1344

1344:                                             ; preds = %1435, %1343
  %1345 = load i8, ptr %108, align 1, !tbaa !18, !range !20, !noundef !21
  %1346 = trunc i8 %1345 to i1
  br i1 %1346, label %1348, label %1347

1347:                                             ; preds = %1344
  store i32 214, ptr %12, align 4
  br label %1436

1348:                                             ; preds = %1344
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #6
  %1349 = load ptr, ptr %44, align 8, !tbaa !5
  %1350 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %1349)
  store ptr %1350, ptr %109, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #6
  %1351 = load ptr, ptr %45, align 8, !tbaa !5
  %1352 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %1351)
  store ptr %1352, ptr %110, align 8, !tbaa !5
  br label %1353

1353:                                             ; preds = %1431, %1348
  %1354 = load ptr, ptr %109, align 8, !tbaa !5
  %1355 = load ptr, ptr %110, align 8, !tbaa !5
  %1356 = load i8, ptr %108, align 1, !tbaa !18, !range !20, !noundef !21
  %1357 = trunc i8 %1356 to i1
  br i1 %1357, label %1359, label %1358

1358:                                             ; preds = %1353
  store i32 217, ptr %12, align 4
  br label %1432

1359:                                             ; preds = %1353
  %1360 = load ptr, ptr %109, align 8, !tbaa !5
  %1361 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1360, i32 0, i32 3
  %1362 = load ptr, ptr %110, align 8, !tbaa !5
  %1363 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1362, i32 0, i32 3
  %1364 = call noundef zeroext i1 @_ZNK8RcStringneERKS_(ptr noundef nonnull align 8 dereferenceable(8) %1361, ptr noundef nonnull align 8 dereferenceable(8) %1363)
  br i1 %1364, label %1377, label %1365

1365:                                             ; preds = %1359
  %1366 = load ptr, ptr %109, align 8, !tbaa !5
  %1367 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1366, i32 0, i32 1
  %1368 = load i8, ptr %1367, align 8, !tbaa !104, !range !20, !noundef !21
  %1369 = trunc i8 %1368 to i1
  %1370 = zext i1 %1369 to i32
  %1371 = load ptr, ptr %110, align 8, !tbaa !5
  %1372 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1371, i32 0, i32 1
  %1373 = load i8, ptr %1372, align 8, !tbaa !104, !range !20, !noundef !21
  %1374 = trunc i8 %1373 to i1
  %1375 = zext i1 %1374 to i32
  %1376 = icmp ne i32 %1370, %1375
  br i1 %1376, label %1377, label %1378

1377:                                             ; preds = %1365, %1359
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1432

1378:                                             ; preds = %1365
  %1379 = load ptr, ptr %109, align 8, !tbaa !5
  %1380 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1379, i32 0, i32 5
  %1381 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1380) #6
  %1382 = load ptr, ptr %110, align 8, !tbaa !5
  %1383 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1382, i32 0, i32 5
  %1384 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1383) #6
  %1385 = icmp ne i64 %1381, %1384
  br i1 %1385, label %1386, label %1387

1386:                                             ; preds = %1378
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1432

1387:                                             ; preds = %1378
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #6
  store i32 0, ptr %111, align 4, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #6
  store i32 0, ptr %112, align 4, !tbaa !65
  br label %1388

1388:                                             ; preds = %1415, %1387
  %1389 = load i32, ptr %112, align 4, !tbaa !65
  %1390 = zext i32 %1389 to i64
  %1391 = load ptr, ptr %109, align 8, !tbaa !5
  %1392 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1391, i32 0, i32 5
  %1393 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1392) #6
  %1394 = icmp ult i64 %1390, %1393
  br i1 %1394, label %1396, label %1395

1395:                                             ; preds = %1388
  store i32 220, ptr %12, align 4
  br label %1418

1396:                                             ; preds = %1388
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #6
  %1397 = load ptr, ptr %109, align 8, !tbaa !5
  %1398 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1397, i32 0, i32 5
  %1399 = load i32, ptr %112, align 4, !tbaa !65
  %1400 = zext i32 %1399 to i64
  %1401 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1398, i64 noundef %1400) #6
  %1402 = load ptr, ptr %7, align 8, !tbaa !5
  %1403 = load ptr, ptr %110, align 8, !tbaa !5
  %1404 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1403, i32 0, i32 5
  %1405 = load i32, ptr %112, align 4, !tbaa !65
  %1406 = zext i32 %1405 to i64
  %1407 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1404, i64 noundef %1406) #6
  %1408 = load ptr, ptr %9, align 8, !tbaa !5
  %1409 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %1401, ptr noundef nonnull align 8 dereferenceable(8) %1402, ptr noundef nonnull align 8 dereferenceable(8) %1407, ptr noundef nonnull align 8 dereferenceable(8) %1408)
  store i32 %1409, ptr %113, align 4, !tbaa !59
  %1410 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %111, ptr noundef nonnull align 4 dereferenceable(4) %113)
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #6
  %1411 = load i32, ptr %111, align 4, !tbaa !59
  %1412 = icmp eq i32 %1411, 2
  br i1 %1412, label %1413, label %1414

1413:                                             ; preds = %1396
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1418

1414:                                             ; preds = %1396
  br label %1415

1415:                                             ; preds = %1414
  %1416 = load i32, ptr %112, align 4, !tbaa !65
  %1417 = add i32 %1416, 1
  store i32 %1417, ptr %112, align 4, !tbaa !65
  br label %1388, !llvm.loop !127

1418:                                             ; preds = %1413, %1395
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #6
  %1419 = load i32, ptr %12, align 4
  switch i32 %1419, label %1430 [
    i32 220, label %1420
  ]

1420:                                             ; preds = %1418
  call void @llvm.lifetime.start.p0(i64 4, ptr %114) #6
  %1421 = load ptr, ptr %109, align 8, !tbaa !5
  %1422 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1421, i32 0, i32 4
  %1423 = load ptr, ptr %7, align 8, !tbaa !5
  %1424 = load ptr, ptr %110, align 8, !tbaa !5
  %1425 = getelementptr inbounds %"struct.HIR::TypeData_FunctionPointer", ptr %1424, i32 0, i32 4
  %1426 = load ptr, ptr %9, align 8, !tbaa !5
  %1427 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %1422, ptr noundef nonnull align 8 dereferenceable(8) %1423, ptr noundef nonnull align 8 dereferenceable(8) %1425, ptr noundef nonnull align 8 dereferenceable(8) %1426)
  store i32 %1427, ptr %114, align 4, !tbaa !59
  %1428 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %111, ptr noundef nonnull align 4 dereferenceable(4) %114)
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #6
  %1429 = load i32, ptr %111, align 4, !tbaa !59
  store i32 %1429, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1430

1430:                                             ; preds = %1420, %1418
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #6
  br label %1432

1431:                                             ; No predecessors!
  store i8 0, ptr %108, align 1, !tbaa !18
  br label %1353, !llvm.loop !128

1432:                                             ; preds = %1430, %1386, %1377, %1358
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #6
  %1433 = load i32, ptr %12, align 4
  switch i32 %1433, label %1436 [
    i32 217, label %1434
  ]

1434:                                             ; preds = %1432
  br label %1435

1435:                                             ; preds = %1434
  store i8 0, ptr %108, align 1, !tbaa !18
  br label %1344, !llvm.loop !129

1436:                                             ; preds = %1432, %1347
  call void @llvm.lifetime.end.p0(i64 1, ptr %108) #6
  %1437 = load i32, ptr %12, align 4
  switch i32 %1437, label %1509 [
    i32 214, label %1438
  ]

1438:                                             ; preds = %1436
  br label %1507

1439:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %115) #6
  store i8 1, ptr %115, align 1, !tbaa !18
  br label %1440

1440:                                             ; preds = %1469, %1439
  %1441 = load i8, ptr %115, align 1, !tbaa !18, !range !20, !noundef !21
  %1442 = trunc i8 %1441 to i1
  br i1 %1442, label %1444, label %1443

1443:                                             ; preds = %1440
  store i32 223, ptr %12, align 4
  br label %1470

1444:                                             ; preds = %1440
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #6
  %1445 = load ptr, ptr %44, align 8, !tbaa !5
  %1446 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %1445)
  store ptr %1446, ptr %116, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #6
  %1447 = load ptr, ptr %45, align 8, !tbaa !5
  %1448 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %1447)
  store ptr %1448, ptr %117, align 8, !tbaa !5
  br label %1449

1449:                                             ; preds = %1465, %1444
  %1450 = load ptr, ptr %116, align 8, !tbaa !5
  %1451 = load ptr, ptr %117, align 8, !tbaa !5
  %1452 = load i8, ptr %115, align 1, !tbaa !18, !range !20, !noundef !21
  %1453 = trunc i8 %1452 to i1
  br i1 %1453, label %1455, label %1454

1454:                                             ; preds = %1449
  store i32 226, ptr %12, align 4
  br label %1466

1455:                                             ; preds = %1449
  %1456 = load ptr, ptr %116, align 8, !tbaa !5
  %1457 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %1456, i32 0, i32 0
  %1458 = load ptr, ptr %1457, align 8, !tbaa !130
  %1459 = load ptr, ptr %117, align 8, !tbaa !5
  %1460 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %1459, i32 0, i32 0
  %1461 = load ptr, ptr %1460, align 8, !tbaa !130
  %1462 = icmp ne ptr %1458, %1461
  br i1 %1462, label %1463, label %1464

1463:                                             ; preds = %1455
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1466

1464:                                             ; preds = %1455
  store i32 0, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1466

1465:                                             ; No predecessors!
  store i8 0, ptr %115, align 1, !tbaa !18
  br label %1449, !llvm.loop !132

1466:                                             ; preds = %1464, %1463, %1454
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #6
  %1467 = load i32, ptr %12, align 4
  switch i32 %1467, label %1470 [
    i32 226, label %1468
  ]

1468:                                             ; preds = %1466
  br label %1469

1469:                                             ; preds = %1468
  store i8 0, ptr %115, align 1, !tbaa !18
  br label %1440, !llvm.loop !133

1470:                                             ; preds = %1466, %1443
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #6
  %1471 = load i32, ptr %12, align 4
  switch i32 %1471, label %1509 [
    i32 223, label %1472
  ]

1472:                                             ; preds = %1470
  br label %1507

1473:                                             ; preds = %627
  call void @llvm.lifetime.start.p0(i64 1, ptr %118) #6
  store i8 1, ptr %118, align 1, !tbaa !18
  br label %1474

1474:                                             ; preds = %1503, %1473
  %1475 = load i8, ptr %118, align 1, !tbaa !18, !range !20, !noundef !21
  %1476 = trunc i8 %1475 to i1
  br i1 %1476, label %1478, label %1477

1477:                                             ; preds = %1474
  store i32 229, ptr %12, align 4
  br label %1504

1478:                                             ; preds = %1474
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #6
  %1479 = load ptr, ptr %44, align 8, !tbaa !5
  %1480 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %1479)
  store ptr %1480, ptr %119, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #6
  %1481 = load ptr, ptr %45, align 8, !tbaa !5
  %1482 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %1481)
  store ptr %1482, ptr %120, align 8, !tbaa !5
  br label %1483

1483:                                             ; preds = %1499, %1478
  %1484 = load ptr, ptr %119, align 8, !tbaa !5
  %1485 = load ptr, ptr %120, align 8, !tbaa !5
  %1486 = load i8, ptr %118, align 1, !tbaa !18, !range !20, !noundef !21
  %1487 = trunc i8 %1486 to i1
  br i1 %1487, label %1489, label %1488

1488:                                             ; preds = %1483
  store i32 232, ptr %12, align 4
  br label %1500

1489:                                             ; preds = %1483
  %1490 = load ptr, ptr %119, align 8, !tbaa !5
  %1491 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %1490, i32 0, i32 0
  %1492 = load ptr, ptr %1491, align 8, !tbaa !134
  %1493 = load ptr, ptr %120, align 8, !tbaa !5
  %1494 = getelementptr inbounds %"struct.HIR::TypeData::Data_Generator", ptr %1493, i32 0, i32 0
  %1495 = load ptr, ptr %1494, align 8, !tbaa !134
  %1496 = icmp ne ptr %1492, %1495
  br i1 %1496, label %1497, label %1498

1497:                                             ; preds = %1489
  store i32 2, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1500

1498:                                             ; preds = %1489
  store i32 0, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %1500

1499:                                             ; No predecessors!
  store i8 0, ptr %118, align 1, !tbaa !18
  br label %1483, !llvm.loop !136

1500:                                             ; preds = %1498, %1497, %1488
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #6
  %1501 = load i32, ptr %12, align 4
  switch i32 %1501, label %1504 [
    i32 232, label %1502
  ]

1502:                                             ; preds = %1500
  br label %1503

1503:                                             ; preds = %1502
  store i8 0, ptr %118, align 1, !tbaa !18
  br label %1474, !llvm.loop !137

1504:                                             ; preds = %1500, %1477
  call void @llvm.lifetime.end.p0(i64 1, ptr %118) #6
  %1505 = load i32, ptr %12, align 4
  switch i32 %1505, label %1509 [
    i32 229, label %1506
  ]

1506:                                             ; preds = %1504
  br label %1507

1507:                                             ; preds = %1506, %1472, %1438, %1342, %1310, %1269, %1228, %1158, %1126, %1059, %889, %802, %754, %708, %676, %651, %627
  br label %1508

1508:                                             ; preds = %1507
  store i8 0, ptr %43, align 1, !tbaa !18
  br label %623, !llvm.loop !138

1509:                                             ; preds = %1504, %1470, %1436, %1340, %1308, %1267, %1226, %1156, %1124, %1057, %887, %800, %752, %706, %674, %626
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  %1510 = load i32, ptr %12, align 4
  switch i32 %1510, label %1513 [
    i32 101, label %1511
  ]

1511:                                             ; preds = %1509
  br label %1512

1512:                                             ; preds = %1511
  store i8 0, ptr %43, align 1, !tbaa !18
  br label %614, !llvm.loop !139

1513:                                             ; preds = %1509, %617
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #6
  %1514 = load i32, ptr %12, align 4
  switch i32 %1514, label %1517 [
    i32 98, label %1515
  ]

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

1517:                                             ; preds = %1513, %612, %602, %428, %198, %185, %172, %161, %142
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  %1518 = load i32, ptr %5, align 4
  ret i32 %1518
}

declare noundef i32 @_ZNK3HIR4Path25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(8)) #5

declare noundef i32 @_ZNK3HIR9TraitPath25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(8)) #5

declare noundef i32 @_ZNK3HIR11GenericPath25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) #5

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

declare noundef i32 @_ZNK3HIR10PathParams25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #5

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !14, i64 8}
!12 = !{!"_ZTSN3HIR10GenericRefE", !13, i64 0, !14, i64 8}
!13 = !{!"_ZTS8RcString", !6, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !17, i64 4}
!16 = !{!"_ZTSN3HIR8TypeData10Data_InferE", !14, i64 0, !17, i64 4}
!17 = !{!"_ZTSN3HIR10InferClassE", !7, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!23, !23, i64 0}
!23 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !25}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}
!44 = distinct !{!44, !25}
!45 = distinct !{!45, !25}
!46 = distinct !{!46, !25}
!47 = distinct !{!47, !25}
!48 = distinct !{!48, !25}
!49 = distinct !{!49, !25}
!50 = distinct !{!50, !25}
!51 = distinct !{!51, !25}
!52 = distinct !{!52, !25}
!53 = distinct !{!53, !25}
!54 = distinct !{!54, !25}
!55 = distinct !{!55, !25}
!56 = distinct !{!56, !25}
!57 = distinct !{!57, !25}
!58 = distinct !{!58, !25}
!59 = !{!60, !60, i64 0}
!60 = !{!"_ZTSN3HIR7CompareE", !7, i64 0}
!61 = distinct !{!61, !25}
!62 = distinct !{!62, !25}
!63 = distinct !{!63, !25}
!64 = distinct !{!64, !25}
!65 = !{!14, !14, i64 0}
!66 = distinct !{!66, !25}
!67 = distinct !{!67, !25}
!68 = distinct !{!68, !25}
!69 = distinct !{!69, !25}
!70 = distinct !{!70, !25}
!71 = distinct !{!71, !25}
!72 = distinct !{!72, !25}
!73 = !{!74, !14, i64 88}
!74 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner8Data_FcnE", !75, i64 0, !14, i64 88}
!75 = !{!"_ZTSN3HIR4PathE", !76, i64 0}
!76 = !{!"_ZTSN3HIR4Path4DataE", !77, i64 0, !7, i64 8}
!77 = !{!"_ZTSN3HIR4Path4Data3TagE", !7, i64 0}
!78 = distinct !{!78, !25}
!79 = distinct !{!79, !25}
!80 = distinct !{!80, !25}
!81 = distinct !{!81, !25}
!82 = distinct !{!82, !25}
!83 = distinct !{!83, !25}
!84 = distinct !{!84, !25}
!85 = distinct !{!85, !25}
!86 = distinct !{!86, !25}
!87 = distinct !{!87, !25}
!88 = distinct !{!88, !25}
!89 = distinct !{!89, !25}
!90 = distinct !{!90, !25}
!91 = !{!92, !94, i64 4}
!92 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !93, i64 0, !94, i64 4, !95, i64 8}
!93 = !{!"_ZTSN3HIR11LifetimeRefE", !14, i64 0}
!94 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!95 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!96 = distinct !{!96, !25}
!97 = distinct !{!97, !25}
!98 = !{!99, !94, i64 0}
!99 = !{!"_ZTSN3HIR8TypeData12Data_PointerE", !94, i64 0, !95, i64 8}
!100 = distinct !{!100, !25}
!101 = distinct !{!101, !25}
!102 = distinct !{!102, !25}
!103 = distinct !{!103, !25}
!104 = !{!105, !19, i64 96}
!105 = !{!"_ZTSN3HIR24TypeData_FunctionPointerE", !106, i64 0, !19, i64 96, !19, i64 97, !13, i64 104, !95, i64 112, !123, i64 120}
!106 = !{!"_ZTSN3HIR13GenericParamsE", !107, i64 0, !111, i64 24, !115, i64 48, !119, i64 72}
!107 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !108, i64 0}
!108 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !109, i64 0}
!109 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !110, i64 0}
!110 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!111 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !112, i64 0}
!112 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !113, i64 0}
!113 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !114, i64 0}
!114 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!115 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !116, i64 0}
!116 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !117, i64 0}
!117 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !118, i64 0}
!118 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!119 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !120, i64 0}
!120 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !121, i64 0}
!121 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !122, i64 0}
!122 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!123 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !124, i64 0}
!124 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !125, i64 0}
!125 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !126, i64 0}
!126 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!127 = distinct !{!127, !25}
!128 = distinct !{!128, !25}
!129 = distinct !{!129, !25}
!130 = !{!131, !6, i64 0}
!131 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !6, i64 0}
!132 = distinct !{!132, !25}
!133 = distinct !{!133, !25}
!134 = !{!135, !6, i64 0}
!135 = !{!"_ZTSN3HIR8TypeData14Data_GeneratorE", !6, i64 0}
!136 = distinct !{!136, !25}
!137 = distinct !{!137, !25}
!138 = distinct !{!138, !25}
!139 = distinct !{!139, !25}


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

@.str.18 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE = external hidden unnamed_addr constant [118 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [9 x i8], align 1
@switch.table._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE = private unnamed_addr constant [3 x i32] [i32 1, i32 1, i32 2], align 4
@switch.table._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE.1 = private unnamed_addr constant [3 x i32] [i32 1, i32 2, i32 1], align 4

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) local_unnamed_addr #4 align 2 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  br label %tailrecurse

tailrecurse:                                      ; preds = %tailrecurse.backedge, %4
  %.tr = phi ptr [ %0, %4 ], [ %.tr.be, %tailrecurse.backedge ]
  %.tr726 = phi ptr [ %2, %4 ], [ %.tr726.be, %tailrecurse.backedge ]
  %12 = load ptr, ptr %3, align 8, !tbaa !5
  %13 = load ptr, ptr %12, align 8
  %14 = tail call noundef nonnull align 8 dereferenceable(8) ptr %13(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %.tr)
  %15 = load ptr, ptr %3, align 8, !tbaa !5
  %16 = load ptr, ptr %15, align 8
  %17 = tail call noundef nonnull align 8 dereferenceable(8) ptr %16(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %.tr726)
  %18 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %19 = tail call noundef zeroext i1 @_ZNK3HIR8TypeData8is_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %18)
  br i1 %19, label %20, label %22

20:                                               ; preds = %tailrecurse
  %21 = tail call noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %17)
  br i1 %21, label %.thread686, label %22

22:                                               ; preds = %20, %tailrecurse
  %23 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %24 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  %25 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %26 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %25)
  %.not = icmp eq i32 %24, %26
  br i1 %.not, label %61, label %27

27:                                               ; preds = %22
  %28 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %29 = tail call noundef zeroext i1 @_ZNK3HIR8TypeData7is_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %28)
  br i1 %29, label %30, label %35

30:                                               ; preds = %27
  %31 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %32 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %31)
  %33 = getelementptr inbounds i8, ptr %32, i64 88
  %34 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %33)
  br i1 %34, label %.thread686, label %35

35:                                               ; preds = %30, %27
  %36 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %37 = tail call noundef zeroext i1 @_ZNK3HIR8TypeData7is_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %36)
  br i1 %37, label %38, label %43

38:                                               ; preds = %35
  %39 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %40 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %39)
  %41 = getelementptr inbounds i8, ptr %40, i64 88
  %42 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %41)
  br i1 %42, label %.thread686, label %43

43:                                               ; preds = %38, %35
  %44 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %45 = tail call noundef zeroext i1 @_ZNK3HIR8TypeData10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %44)
  br i1 %45, label %46, label %52

46:                                               ; preds = %43
  %47 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %48 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %47)
  %49 = getelementptr inbounds i8, ptr %48, i64 8
  %50 = load i32, ptr %49, align 8, !tbaa !8
  %.mask = and i32 %50, -256
  %51 = icmp eq i32 %.mask, 512
  br i1 %51, label %.thread686, label %52

52:                                               ; preds = %46, %43
  %53 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %54 = tail call noundef zeroext i1 @_ZNK3HIR8TypeData10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %53)
  br i1 %54, label %55, label %61

55:                                               ; preds = %52
  %56 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %57 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %56)
  %58 = getelementptr inbounds i8, ptr %57, i64 8
  %59 = load i32, ptr %58, align 8, !tbaa !8
  %.mask632 = and i32 %59, -256
  %60 = icmp eq i32 %.mask632, 512
  br i1 %60, label %.thread686, label %61

61:                                               ; preds = %52, %55, %22
  %62 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %63 = tail call noundef ptr @_ZNK3HIR8TypeData9opt_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %62)
  %.not633 = icmp eq ptr %63, null
  br i1 %.not633, label %.thread683, label %64

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %63, i64 4
  %66 = load i32, ptr %65, align 4, !tbaa !14
  switch i32 %66, label %.thread681 [
    i32 0, label %.thread686
    i32 1, label %67
    i32 2, label %80
  ]

67:                                               ; preds = %64
  %68 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %69 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %68)
  switch i32 %69, label %.thread686 [
    i32 0, label %.loopexit1182
    i32 3, label %.loopexit1183
    i32 1, label %.preheader734.peel
    i32 4, label %.loopexit1186
  ]

.preheader734.peel:                               ; preds = %67
  %70 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %68)
  %71 = getelementptr inbounds i8, ptr %70, i64 4
  %72 = load i32, ptr %71, align 4
  %.fr.peel = freeze i32 %72
  %73 = icmp ult i32 %.fr.peel, 3
  br i1 %73, label %switch.lookup, label %80

.loopexit1182:                                    ; preds = %67
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 1314, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #6
  unreachable

.loopexit1183:                                    ; preds = %67
  %74 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %68)
  %75 = load i32, ptr %74, align 4, !tbaa !17
  %switch = icmp ult i32 %75, 12
  %spec.select661 = select i1 %switch, i32 1, i32 2
  br label %.thread686

.loopexit1186:                                    ; preds = %67
  %76 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %68)
  %77 = getelementptr inbounds i8, ptr %76, i64 88
  %78 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %77)
  %79 = select i1 %78, i32 1, i32 2
  br label %.thread686

80:                                               ; preds = %.preheader734.peel, %64
  %81 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %82 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %81)
  switch i32 %82, label %.thread686 [
    i32 0, label %.loopexit1208
    i32 3, label %.loopexit1209
    i32 1, label %.preheader732.peel
    i32 4, label %.loopexit1212
  ]

.preheader732.peel:                               ; preds = %80
  %83 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %81)
  %84 = getelementptr inbounds i8, ptr %83, i64 4
  %85 = load i32, ptr %84, align 4
  %.fr899.peel = freeze i32 %85
  %86 = icmp ult i32 %.fr899.peel, 3
  br i1 %86, label %switch.lookup1481, label %.thread681

.loopexit1208:                                    ; preds = %80
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 1346, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #6
  unreachable

.loopexit1209:                                    ; preds = %80
  %87 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %81)
  %88 = load i32, ptr %87, align 4, !tbaa !17
  %89 = and i32 %88, -2
  %switch662 = icmp eq i32 %89, 12
  %spec.select663 = select i1 %switch662, i32 1, i32 2
  br label %.thread686

.loopexit1212:                                    ; preds = %80
  %90 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %81)
  %91 = getelementptr inbounds i8, ptr %90, i64 88
  %92 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %91)
  %93 = select i1 %92, i32 1, i32 2
  br label %.thread686

.thread681:                                       ; preds = %.preheader732.peel, %64
  %94 = tail call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.24, ptr %94, align 16, !tbaa !19
  tail call void @__cxa_throw(ptr nonnull %94, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

.thread683:                                       ; preds = %61
  %95 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %96 = tail call noundef ptr @_ZNK3HIR8TypeData9opt_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %95)
  %.not634 = icmp eq ptr %96, null
  br i1 %.not634, label %127, label %97

97:                                               ; preds = %.thread683
  %98 = getelementptr inbounds i8, ptr %96, i64 4
  %99 = load i32, ptr %98, align 4, !tbaa !14
  switch i32 %99, label %125 [
    i32 0, label %.thread686
    i32 1, label %100
    i32 2, label %112
  ]

100:                                              ; preds = %97
  %101 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %102 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %101)
  switch i32 %102, label %.thread686 [
    i32 0, label %103
    i32 3, label %104
    i32 4, label %107
  ]

103:                                              ; preds = %100
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 1385, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #6
  unreachable

104:                                              ; preds = %100
  %105 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %101)
  %106 = load i32, ptr %105, align 4, !tbaa !17
  %switch664 = icmp ult i32 %106, 12
  %spec.select665 = select i1 %switch664, i32 1, i32 2
  br label %.thread686

107:                                              ; preds = %100
  %108 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %101)
  %109 = getelementptr inbounds i8, ptr %108, i64 88
  %110 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %109)
  %111 = select i1 %110, i32 1, i32 2
  br label %.thread686

112:                                              ; preds = %97
  %113 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %114 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %113)
  switch i32 %114, label %.thread686 [
    i32 0, label %115
    i32 3, label %116
    i32 4, label %120
  ]

115:                                              ; preds = %112
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 1407, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #6
  unreachable

116:                                              ; preds = %112
  %117 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %113)
  %118 = load i32, ptr %117, align 4, !tbaa !17
  %119 = and i32 %118, -2
  %switch667 = icmp eq i32 %119, 12
  %spec.select668 = select i1 %switch667, i32 1, i32 2
  br label %.thread686

120:                                              ; preds = %112
  %121 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %113)
  %122 = getelementptr inbounds i8, ptr %121, i64 88
  %123 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %122)
  %124 = select i1 %123, i32 1, i32 2
  br label %.thread686

125:                                              ; preds = %97
  %126 = tail call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.24, ptr %126, align 16, !tbaa !19
  tail call void @__cxa_throw(ptr nonnull %126, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

127:                                              ; preds = %.thread683
  %128 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %129 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %128)
  %130 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %131 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %130)
  %.not635 = icmp eq i32 %129, %131
  br i1 %.not635, label %.preheader741.split, label %.thread686

.preheader741.split:                              ; preds = %127
  %132 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %133 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %17)
  %134 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  switch i32 %134, label %.loopexit738 [
    i32 0, label %.split914
    i32 1, label %.split916
    i32 2, label %.split919
    i32 3, label %.split923
    i32 4, label %.split927
    i32 5, label %.split931
    i32 6, label %.split935
    i32 7, label %.split939
    i32 8, label %.split943
    i32 9, label %.split947
    i32 10, label %.split951
    i32 11, label %.split955
    i32 12, label %.split959
    i32 13, label %.split963
    i32 14, label %.split967
    i32 15, label %.split971
    i32 16, label %.split975
  ], !llvm.loop !20

.split914:                                        ; preds = %.preheader741.split
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 1434, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #6
  unreachable

.split916:                                        ; preds = %.preheader741.split
  %135 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %136 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  tail call void @__assert_fail(ptr noundef nonnull @.str.86, ptr noundef nonnull @.str.18, i32 noundef 1435, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #6
  unreachable

.split919:                                        ; preds = %.preheader741.split
  %137 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %138 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  br label %.thread686

.split923:                                        ; preds = %.preheader741.split
  %139 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %140 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %141 = load i32, ptr %139, align 4, !tbaa !17
  %142 = load i32, ptr %140, align 4, !tbaa !17
  %143 = icmp eq i32 %141, %142
  %144 = select i1 %143, i32 0, i32 2
  br label %.thread686

.split927:                                        ; preds = %.preheader741.split
  %145 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %146 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %147 = tail call noundef i32 @_ZNK3HIR4Path25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(88) %145, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %146, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %148 = icmp eq i32 %147, 2
  br i1 %148, label %149, label %.thread686

149:                                              ; preds = %.split927
  %150 = getelementptr inbounds i8, ptr %145, i64 88
  %151 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %150)
  br i1 %151, label %155, label %152

152:                                              ; preds = %149
  %153 = getelementptr inbounds i8, ptr %146, i64 88
  %154 = tail call noundef zeroext i1 @_ZNK3HIR15TypePathBinding10is_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %153)
  br i1 %154, label %155, label %.thread686

155:                                              ; preds = %152, %149
  br label %.thread686

.split931:                                        ; preds = %.preheader741.split
  %156 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %157 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %158 = getelementptr inbounds i8, ptr %156, i64 8
  %159 = load i32, ptr %158, align 8, !tbaa !8
  %160 = getelementptr inbounds i8, ptr %157, i64 8
  %161 = load i32, ptr %160, align 8, !tbaa !8
  %.not651 = icmp eq i32 %159, %161
  br i1 %.not651, label %.thread686, label %162

162:                                              ; preds = %.split931
  %.mask652 = and i32 %159, -256
  %163 = icmp eq i32 %.mask652, 512
  br i1 %163, label %.thread686, label %164

164:                                              ; preds = %162
  %.mask653 = and i32 %161, -256
  %165 = icmp eq i32 %.mask653, 512
  %. = select i1 %165, i32 1, i32 2
  br label %.thread686

.split935:                                        ; preds = %.preheader741.split
  %166 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %167 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %168 = getelementptr inbounds i8, ptr %166, i64 144
  %169 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %168) #7
  %170 = getelementptr inbounds i8, ptr %167, i64 144
  %171 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %170) #7
  %.not648 = icmp eq i64 %169, %171
  br i1 %.not648, label %172, label %.thread686

172:                                              ; preds = %.split935
  %173 = tail call noundef i32 @_ZNK3HIR9TraitPath25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(144) %166, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(144) %167, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %174 = icmp eq i32 %173, 2
  br i1 %174, label %.thread686, label %.preheader

.preheader:                                       ; preds = %172
  %175 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %168) #7
  %.not6501001.not = icmp eq i64 %175, 0
  br i1 %.not6501001.not, label %.thread686, label %.lr.ph1004

.lr.ph1004:                                       ; preds = %.preheader, %180
  %176 = phi i64 [ %183, %180 ], [ 0, %.preheader ]
  %.06101003 = phi i32 [ %spec.select, %180 ], [ %173, %.preheader ]
  %.06151002 = phi i32 [ %182, %180 ], [ 0, %.preheader ]
  %177 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %168, i64 noundef %176) #7
  %178 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %170, i64 noundef %176) #7
  %179 = tail call noundef i32 @_ZNK3HIR11GenericPath25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(32) %177, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(32) %178, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %.not649 = icmp eq i32 %179, 2
  br i1 %.not649, label %.thread686, label %180

180:                                              ; preds = %.lr.ph1004
  %181 = icmp eq i32 %179, 1
  %spec.select = select i1 %181, i32 1, i32 %.06101003
  %182 = add i32 %.06151002, 1
  %183 = zext i32 %182 to i64
  %184 = tail call noundef i64 @_ZNKSt6vectorIN3HIR11GenericPathESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %168) #7
  %.not650 = icmp ugt i64 %184, %183
  br i1 %.not650, label %.lr.ph1004, label %.thread686, !llvm.loop !22

.split939:                                        ; preds = %.preheader741.split
  %185 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %186 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %187 = getelementptr inbounds i8, ptr %185, i64 56
  %188 = tail call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %187)
  %189 = getelementptr inbounds i8, ptr %186, i64 56
  %190 = tail call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %189)
  %.not646 = icmp eq i32 %188, %190
  br i1 %.not646, label %.preheader739.split, label %.thread686

.preheader739.split:                              ; preds = %.split939
  %191 = tail call noundef i32 @_ZNK3HIR25TypeData_ErasedType_Inner3tagEv(ptr noundef nonnull align 8 dereferenceable(104) %187)
  switch i32 %191, label %.thread686 [
    i32 0, label %.split981
    i32 2, label %.split983
    i32 3, label %.split985
    i32 1, label %.split989
  ], !llvm.loop !23

.split981:                                        ; preds = %.preheader739.split
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 1480, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE) #6
  unreachable

.split983:                                        ; preds = %.preheader739.split
  %192 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %187)
  %193 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(104) %189)
  br label %tailrecurse.backedge

tailrecurse.backedge:                             ; preds = %.split983, %.split947, %255, %262
  %.tr.be = phi ptr [ %192, %.split983 ], [ %233, %.split947 ], [ %256, %255 ], [ %263, %262 ]
  %.tr726.be = phi ptr [ %193, %.split983 ], [ %234, %.split947 ], [ %257, %255 ], [ %264, %262 ]
  br label %tailrecurse

.split985:                                        ; preds = %.preheader739.split
  %194 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %187)
  %195 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR25TypeData_ErasedType_Inner8as_AliasEv(ptr noundef nonnull align 8 dereferenceable(104) %189)
  %196 = getelementptr inbounds i8, ptr %194, i64 24
  %197 = getelementptr inbounds i8, ptr %195, i64 24
  %198 = tail call noundef zeroext i1 @_ZStneIN3HIR30TypeData_ErasedType_AliasInnerES1_EbRKSt10shared_ptrIT_ERKS2_IT0_E(ptr noundef nonnull align 8 dereferenceable(16) %196, ptr noundef nonnull align 8 dereferenceable(16) %197) #7
  br i1 %198, label %.thread686, label %199

199:                                              ; preds = %.split985
  %200 = tail call noundef i32 @_ZNK3HIR10PathParams25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(24) %194, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(24) %195, ptr noundef nonnull align 8 dereferenceable(8) %3)
  br label %.thread686

.split989:                                        ; preds = %.preheader739.split
  %201 = tail call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %187)
  %202 = tail call noundef nonnull align 8 dereferenceable(92) ptr @_ZNK3HIR25TypeData_ErasedType_Inner6as_FcnEv(ptr noundef nonnull align 8 dereferenceable(104) %189)
  %203 = getelementptr inbounds i8, ptr %201, i64 88
  %204 = load i32, ptr %203, align 8, !tbaa !24
  %205 = getelementptr inbounds i8, ptr %202, i64 88
  %206 = load i32, ptr %205, align 8, !tbaa !24
  %.not647 = icmp eq i32 %204, %206
  br i1 %.not647, label %207, label %.thread686

207:                                              ; preds = %.split989
  %208 = tail call noundef i32 @_ZNK3HIR4Path25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(88) %201, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %202, ptr noundef nonnull align 8 dereferenceable(8) %3)
  br label %.thread686

.split943:                                        ; preds = %.preheader741.split
  %209 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %210 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  store i32 0, ptr %5, align 4, !tbaa !29
  %211 = getelementptr inbounds i8, ptr %209, i64 8
  %212 = tail call noundef zeroext i1 @_ZNK3HIR9ArraySize14is_UnevaluatedEv(ptr noundef nonnull align 8 dereferenceable(32) %211)
  br i1 %212, label %213, label %218

213:                                              ; preds = %.split943
  %214 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR9ArraySize14as_UnevaluatedEv(ptr noundef nonnull align 8 dereferenceable(32) %211)
  %215 = tail call noundef zeroext i1 @_ZNK3HIR12ConstGeneric8is_InferEv(ptr noundef nonnull align 8 dereferenceable(24) %214)
  br i1 %215, label %216, label %218

216:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #7
  store i32 1, ptr %6, align 4, !tbaa !29
  %217 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %6)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  br label %228

218:                                              ; preds = %213, %.split943
  %219 = getelementptr inbounds i8, ptr %210, i64 8
  %220 = tail call noundef zeroext i1 @_ZNK3HIR9ArraySize14is_UnevaluatedEv(ptr noundef nonnull align 8 dereferenceable(32) %219)
  br i1 %220, label %221, label %226

221:                                              ; preds = %218
  %222 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR9ArraySize14as_UnevaluatedEv(ptr noundef nonnull align 8 dereferenceable(32) %219)
  %223 = tail call noundef zeroext i1 @_ZNK3HIR12ConstGeneric8is_InferEv(ptr noundef nonnull align 8 dereferenceable(24) %222)
  br i1 %223, label %224, label %226

224:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #7
  store i32 1, ptr %7, align 4, !tbaa !29
  %225 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %7)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  br label %228

226:                                              ; preds = %221, %218
  %227 = tail call noundef zeroext i1 @_ZNK3HIR9ArraySizeneERKS0_(ptr noundef nonnull align 8 dereferenceable(32) %211, ptr noundef nonnull align 8 dereferenceable(32) %219)
  br i1 %227, label %232, label %228

228:                                              ; preds = %224, %226, %216
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  %229 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %209, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %210, ptr noundef nonnull align 8 dereferenceable(8) %3)
  store i32 %229, ptr %8, align 4, !tbaa !29
  %230 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %8)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  %231 = load i32, ptr %5, align 4, !tbaa !29
  br label %232

232:                                              ; preds = %226, %228
  %.93 = phi i32 [ %231, %228 ], [ 2, %226 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  br label %.thread686

.split947:                                        ; preds = %.preheader741.split
  %233 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %234 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  br label %tailrecurse.backedge

.split951:                                        ; preds = %.preheader741.split
  %235 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %236 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %237 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %235) #7
  %238 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %236) #7
  %.not643 = icmp eq i64 %237, %238
  br i1 %.not643, label %.preheader728, label %.thread686

.preheader728:                                    ; preds = %.split951
  %239 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %235) #7
  %.not645995.not = icmp eq i64 %239, 0
  br i1 %.not645995.not, label %.thread686, label %.lr.ph998

.lr.ph998:                                        ; preds = %.preheader728, %244
  %240 = phi i64 [ %247, %244 ], [ 0, %.preheader728 ]
  %.0587997 = phi i32 [ %246, %244 ], [ 0, %.preheader728 ]
  %.0588996 = phi i32 [ %spec.select658, %244 ], [ 0, %.preheader728 ]
  %241 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %235, i64 noundef %240) #7
  %242 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %236, i64 noundef %240) #7
  %243 = tail call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %241, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %242, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %.not644 = icmp eq i32 %243, 2
  br i1 %.not644, label %.thread686, label %244

244:                                              ; preds = %.lr.ph998
  %245 = icmp eq i32 %243, 1
  %spec.select658 = select i1 %245, i32 1, i32 %.0588996
  %246 = add i32 %.0587997, 1
  %247 = zext i32 %246 to i64
  %248 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %235) #7
  %.not645 = icmp ugt i64 %248, %247
  br i1 %.not645, label %.lr.ph998, label %.thread686, !llvm.loop !31

.split955:                                        ; preds = %.preheader741.split
  %249 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %250 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %251 = getelementptr inbounds i8, ptr %249, i64 4
  %252 = load i32, ptr %251, align 4, !tbaa !32
  %253 = getelementptr inbounds i8, ptr %250, i64 4
  %254 = load i32, ptr %253, align 4, !tbaa !32
  %.not642 = icmp eq i32 %252, %254
  br i1 %.not642, label %255, label %.thread686

255:                                              ; preds = %.split955
  %256 = getelementptr inbounds i8, ptr %249, i64 8
  %257 = getelementptr inbounds i8, ptr %250, i64 8
  br label %tailrecurse.backedge

.split959:                                        ; preds = %.preheader741.split
  %258 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %259 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %260 = load i32, ptr %258, align 8, !tbaa !37
  %261 = load i32, ptr %259, align 8, !tbaa !37
  %.not641 = icmp eq i32 %260, %261
  br i1 %.not641, label %262, label %.thread686

262:                                              ; preds = %.split959
  %263 = getelementptr inbounds i8, ptr %258, i64 8
  %264 = getelementptr inbounds i8, ptr %259, i64 8
  br label %tailrecurse.backedge

.split963:                                        ; preds = %.preheader741.split
  %265 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %266 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %267 = tail call noundef i32 @_ZNK3HIR4Path25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(88) %265, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %266, ptr noundef nonnull align 8 dereferenceable(8) %3)
  br label %.thread686

.split967:                                        ; preds = %.preheader741.split
  %268 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %269 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %270 = getelementptr inbounds i8, ptr %268, i64 104
  %271 = getelementptr inbounds i8, ptr %269, i64 104
  %272 = tail call noundef zeroext i1 @_ZNK8RcStringneERKS_(ptr noundef nonnull align 8 dereferenceable(8) %270, ptr noundef nonnull align 8 dereferenceable(8) %271)
  br i1 %272, label %.thread686, label %273

273:                                              ; preds = %.split967
  %274 = getelementptr inbounds i8, ptr %268, i64 96
  %275 = load i8, ptr %274, align 8, !tbaa !39, !range !63, !noundef !64
  %276 = getelementptr inbounds i8, ptr %269, i64 96
  %277 = load i8, ptr %276, align 8, !tbaa !39, !range !63, !noundef !64
  %.not638 = icmp eq i8 %275, %277
  br i1 %.not638, label %278, label %.thread686

278:                                              ; preds = %273
  %279 = getelementptr inbounds i8, ptr %268, i64 120
  %280 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %279) #7
  %281 = getelementptr inbounds i8, ptr %269, i64 120
  %282 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %281) #7
  %.not639 = icmp eq i64 %280, %282
  br i1 %.not639, label %283, label %.thread686

283:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  store i32 0, ptr %9, align 4, !tbaa !29
  %284 = tail call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %279) #7
  %.not640993.not = icmp eq i64 %284, 0
  br i1 %.not640993.not, label %._crit_edge, label %.lr.ph

285:                                              ; preds = %.lr.ph
  %286 = add i32 %.0569994, 1
  %287 = zext i32 %286 to i64
  %288 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %279) #7
  %.not640 = icmp ugt i64 %288, %287
  br i1 %.not640, label %.lr.ph, label %._crit_edge, !llvm.loop !65

.lr.ph:                                           ; preds = %283, %285
  %289 = phi i64 [ %287, %285 ], [ 0, %283 ]
  %.0569994 = phi i32 [ %286, %285 ], [ 0, %283 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #7
  %290 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %279, i64 noundef %289) #7
  %291 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %281, i64 noundef %289) #7
  %292 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %290, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %291, ptr noundef nonnull align 8 dereferenceable(8) %3)
  store i32 %292, ptr %10, align 4, !tbaa !29
  %293 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %10)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  %294 = load i32, ptr %9, align 4, !tbaa !29
  %295 = icmp eq i32 %294, 2
  br i1 %295, label %.thread695, label %285

._crit_edge:                                      ; preds = %285, %283
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #7
  %296 = getelementptr inbounds i8, ptr %268, i64 112
  %297 = getelementptr inbounds i8, ptr %269, i64 112
  %298 = call noundef i32 @_ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(8) %296, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %297, ptr noundef nonnull align 8 dereferenceable(8) %3)
  store i32 %298, ptr %11, align 4, !tbaa !29
  %299 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3HIRaNERNS_7CompareERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %11)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  %300 = load i32, ptr %9, align 4, !tbaa !29
  br label %.thread695

.thread695:                                       ; preds = %.lr.ph, %._crit_edge
  %.117 = phi i32 [ %300, %._crit_edge ], [ 2, %.lr.ph ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  br label %.thread686

.split971:                                        ; preds = %.preheader741.split
  %301 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %302 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %303 = load ptr, ptr %301, align 8, !tbaa !66
  %304 = load ptr, ptr %302, align 8, !tbaa !66
  %.not637 = icmp eq ptr %303, %304
  %.121 = select i1 %.not637, i32 0, i32 2
  br label %.thread686

.split975:                                        ; preds = %.preheader741.split
  %305 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %132)
  %306 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %133)
  %307 = load ptr, ptr %305, align 8, !tbaa !68
  %308 = load ptr, ptr %306, align 8, !tbaa !68
  %.not636 = icmp eq ptr %307, %308
  %.124 = select i1 %.not636, i32 0, i32 2
  br label %.thread686

.loopexit738:                                     ; preds = %.preheader741.split
  %309 = tail call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.24, ptr %309, align 16, !tbaa !19
  tail call void @__cxa_throw(ptr nonnull %309, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

switch.lookup:                                    ; preds = %.preheader734.peel
  %310 = zext nneg i32 %.fr.peel to i64
  %switch.gep = getelementptr inbounds [3 x i32], ptr @switch.table._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE, i64 0, i64 %310
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %.thread686

switch.lookup1481:                                ; preds = %.preheader732.peel
  %311 = zext nneg i32 %.fr899.peel to i64
  %switch.gep1482 = getelementptr inbounds [3 x i32], ptr @switch.table._ZNK3HIR7TypeRef25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE.1, i64 0, i64 %311
  %switch.load1483 = load i32, ptr %switch.gep1482, align 4
  br label %.thread686

.thread686:                                       ; preds = %.split939, %.split959, %.split955, %127, %55, %46, %38, %30, %20, %.preheader739.split, %244, %.lr.ph998, %180, %.lr.ph1004, %switch.lookup1481, %switch.lookup, %.loopexit1209, %.loopexit1212, %80, %.loopexit1183, %.loopexit1186, %67, %64, %.preheader728, %.preheader, %199, %.split985, %207, %.split989, %97, %107, %100, %120, %112, %104, %116, %278, %.split967, %273, %.thread695, %.split951, %172, %.split935, %.split931, %164, %162, %.split927, %155, %152, %.split919, %.split923, %232, %.split963, %.split971, %.split975
  %.129 = phi i32 [ 2, %278 ], [ 2, %.split967 ], [ 2, %273 ], [ %.117, %.thread695 ], [ 2, %.split951 ], [ 2, %172 ], [ 2, %.split935 ], [ 0, %.split931 ], [ %., %164 ], [ 1, %162 ], [ %147, %.split927 ], [ 2, %152 ], [ 1, %155 ], [ 0, %.split919 ], [ %144, %.split923 ], [ %.93, %232 ], [ %267, %.split963 ], [ %.121, %.split971 ], [ %.124, %.split975 ], [ %spec.select668, %116 ], [ %spec.select665, %104 ], [ 2, %112 ], [ %124, %120 ], [ 2, %100 ], [ %111, %107 ], [ 1, %97 ], [ %200, %199 ], [ 2, %.split985 ], [ %208, %207 ], [ 2, %.split989 ], [ %173, %.preheader ], [ 0, %.preheader728 ], [ 1, %64 ], [ %spec.select661, %.loopexit1183 ], [ %79, %.loopexit1186 ], [ 2, %67 ], [ %spec.select663, %.loopexit1209 ], [ %93, %.loopexit1212 ], [ 2, %80 ], [ %switch.load, %switch.lookup ], [ %switch.load1483, %switch.lookup1481 ], [ %spec.select, %180 ], [ 2, %.lr.ph1004 ], [ %spec.select658, %244 ], [ 2, %.lr.ph998 ], [ 0, %.preheader739.split ], [ 2, %.split955 ], [ 2, %.split959 ], [ 2, %.split939 ], [ 2, %127 ], [ 1, %55 ], [ 1, %46 ], [ 1, %38 ], [ 1, %30 ], [ 0, %20 ]
  ret i32 %.129
}

declare noundef i32 @_ZNK3HIR4Path25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

declare noundef i32 @_ZNK3HIR9TraitPath25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

declare noundef i32 @_ZNK3HIR11GenericPath25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

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

declare noundef i32 @_ZNK3HIR10PathParams25compare_with_placeholdersERK4SpanRKS0_RKNS_19ResolvePlaceholdersE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

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

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

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

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


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