; LLVM IR from thepowersgang/mrustc :: src/hir_typeck/static.ll (ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE)

; 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.Span = type { ptr }
%"class.std::function.0" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.595 = type { i8 }
%"struct.std::_Rb_tree_iterator.579" = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.17, %class.ThinVector.18, %class.ThinVector.19 }
%class.ThinVector.17 = type { ptr }
%class.ThinVector.18 = type { ptr }
%class.ThinVector.19 = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%class.anon.597 = type { i8 }
%"struct.std::pair.588" = type <{ %"class.HIR::TypeRef", i8, [7 x i8] }>
%"class.HIR::TypeRef" = type { ptr }
%"struct.std::pair.585" = type <{ %"struct.std::_Rb_tree_iterator.579", i8, [7 x i8] }>
%class.anon.599 = type { i8 }
%class.anon.601 = type { ptr }
%"class.__gnu_cxx::__normal_iterator.395" = type { ptr }
%"class.std::function.336" = type { %"class.std::_Function_base", ptr }
%class.anon.602 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.518" = type { ptr }
%class.StaticTraitResolve = type { ptr, %struct.TraitResolveCommon, i32, %"class.std::map.34", %"class.std::map.34", %"class.std::map.34", %"class.std::map.39" }
%struct.TraitResolveCommon = type { ptr, ptr, ptr, %"class.std::map.23", %class.RangeVecMap, %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath" }
%"class.std::map.23" = type { %"class.std::_Rb_tree.24" }
%"class.std::_Rb_tree.24" = type { %"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>, std::_Select1st<std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>, std::_Select1st<std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>>, std::less<HIR::TypeRef>>::_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.RangeVecMap = type <{ %"class.std::vector.29", [8 x i8] }>
%"class.std::vector.29" = type { %"struct.std::_Vector_base.30" }
%"struct.std::_Vector_base.30" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"class.std::map.34" = type { %"class.std::_Rb_tree.35" }
%"class.std::_Rb_tree.35" = type { %"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, bool>, std::_Select1st<std::pair<const HIR::TypeRef, bool>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, bool>, std::_Select1st<std::pair<const HIR::TypeRef, bool>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.39" = type { %"class.std::_Rb_tree.40" }
%"class.std::_Rb_tree.40" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, HIR::TypeRef>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, HIR::TypeRef>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, HIR::TypeRef>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, HIR::TypeRef>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::pair.580" = type <{ %"class.HIR::TypeRef", i8, [7 x i8] }>
%"struct.HIR::TypeData::Data_Closure" = type { ptr }
%"struct.HIR::ExprNode_Closure" = type { %"class.HIR::ExprNode.base", %"class.std::vector.266", %"class.HIR::TypeRef", %"class.std::unique_ptr.271", i8, i32, i8, %"struct.HIR::ExprNode_Closure::AvuCache", %"struct.HIR::LifetimeRef", ptr, %"class.HIR::GenericPath", %"class.HIR::GenericPath", %"class.std::vector.289" }
%"class.HIR::ExprNode.base" = type <{ ptr, %struct.Span, %"class.HIR::TypeRef", i32 }>
%"class.std::vector.266" = type { %"struct.std::_Vector_base.267" }
%"struct.std::_Vector_base.267" = type { %"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unique_ptr.271" = type { %"struct.std::__uniq_ptr_data.272" }
%"struct.std::__uniq_ptr_data.272" = type { %"class.std::__uniq_ptr_impl.273" }
%"class.std::__uniq_ptr_impl.273" = type { %"class.std::tuple.274" }
%"class.std::tuple.274" = type { %"struct.std::_Tuple_impl.275" }
%"struct.std::_Tuple_impl.275" = type { %"struct.std::_Head_base.278" }
%"struct.std::_Head_base.278" = type { ptr }
%"struct.HIR::ExprNode_Closure::AvuCache" = type { %"class.std::vector.279", %"class.std::vector.284" }
%"class.std::vector.279" = type { %"struct.std::_Vector_base.280" }
%"struct.std::_Vector_base.280" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.284" = type { %"struct.std::_Vector_base.285" }
%"struct.std::_Vector_base.285" = type { %"struct.std::_Vector_base<HIR::ExprNode_Closure::AvuCache::Capture, std::allocator<HIR::ExprNode_Closure::AvuCache::Capture>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ExprNode_Closure::AvuCache::Capture, std::allocator<HIR::ExprNode_Closure::AvuCache::Capture>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ExprNode_Closure::AvuCache::Capture, std::allocator<HIR::ExprNode_Closure::AvuCache::Capture>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ExprNode_Closure::AvuCache::Capture, std::allocator<HIR::ExprNode_Closure::AvuCache::Capture>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"class.std::vector.289" = type { %"struct.std::_Vector_base.290" }
%"struct.std::_Vector_base.290" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::ExprNode>, std::allocator<std::unique_ptr<HIR::ExprNode>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::ExprNode>, std::allocator<std::unique_ptr<HIR::ExprNode>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::ExprNode>, std::allocator<std::unique_ptr<HIR::ExprNode>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::ExprNode>, std::allocator<std::unique_ptr<HIR::ExprNode>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"class.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr.67", [8 x i8] }
%"class.std::unique_ptr.67" = type { %"struct.std::__uniq_ptr_data.68" }
%"struct.std::__uniq_ptr_data.68" = type { %"class.std::__uniq_ptr_impl.69" }
%"class.std::__uniq_ptr_impl.69" = type { %"class.std::tuple.70" }
%"class.std::tuple.70" = type { %"struct.std::_Tuple_impl.71" }
%"struct.std::_Tuple_impl.71" = type { %"struct.std::_Head_base.74" }
%"struct.std::_Head_base.74" = type { ptr }
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.57", %"class.std::vector.62", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.57" = type { %"struct.std::_Vector_base.58" }
%"struct.std::_Vector_base.58" = 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.62" = type { %"struct.std::_Vector_base.63" }
%"struct.std::_Vector_base.63" = 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 }
%"class.HIR::TraitPath" = type { %"class.std::unique_ptr", %"class.HIR::GenericPath", %"class.std::map", %"class.std::map.47", ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.46" }
%"struct.std::_Head_base.46" = type { ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<RcString, std::pair<const RcString, HIR::TraitPath::AtyEqual>, std::_Select1st<std::pair<const RcString, HIR::TraitPath::AtyEqual>>, std::less<RcString>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.47" = type { %"class.std::_Rb_tree.48" }
%"class.std::_Rb_tree.48" = 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" }

@gTargetVersion = external global i32, align 4
@.str = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE = external hidden unnamed_addr constant [83 x i8], align 1
@__func__._ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE = external hidden unnamed_addr constant [14 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR13TypeData_Path10is_closureEv(ptr noundef nonnull align 8 dereferenceable(112)) #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %struct.Span, align 8
  %9 = alloca %"class.std::function.0", align 8
  %10 = alloca %class.anon.595, align 1
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i8, align 1
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %19 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %20 = alloca %"struct.HIR::PathParams", align 8
  %21 = alloca i8, align 1
  %22 = alloca %"class.std::function", align 8
  %23 = alloca %class.anon.597, align 1
  %24 = alloca %"struct.std::pair.588", align 8
  %25 = alloca %"class.HIR::TypeRef", align 8
  %26 = alloca %"struct.std::pair.585", align 8
  %27 = alloca i8, align 1
  %28 = alloca ptr, align 8
  %29 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %30 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %31 = alloca i8, align 1
  %32 = alloca %"struct.std::pair.588", align 8
  %33 = alloca %"class.HIR::TypeRef", align 8
  %34 = alloca %"struct.std::pair.585", align 8
  %35 = alloca %"struct.HIR::PathParams", align 8
  %36 = alloca i8, align 1
  %37 = alloca %"class.std::function", align 8
  %38 = alloca %class.anon.599, align 1
  %39 = alloca %"struct.std::pair.588", align 8
  %40 = alloca %"class.HIR::TypeRef", align 8
  %41 = alloca %"struct.std::pair.585", align 8
  %42 = alloca i8, align 1
  %43 = alloca ptr, align 8
  %44 = alloca i8, align 1
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca %struct.Span, align 8
  %50 = alloca %"class.std::function.0", align 8
  %51 = alloca %class.anon.601, align 8
  %52 = alloca i8, align 1
  %53 = alloca ptr, align 8
  %54 = alloca i8, align 1
  %55 = alloca ptr, align 8
  %56 = alloca i8, align 1
  %57 = alloca ptr, align 8
  %58 = alloca i8, align 1
  %59 = alloca ptr, align 8
  %60 = alloca i8, align 1
  %61 = alloca ptr, align 8
  %62 = alloca i8, align 1
  %63 = alloca ptr, align 8
  %64 = alloca i8, align 1
  %65 = alloca ptr, align 8
  %66 = alloca i8, align 1
  %67 = alloca ptr, align 8
  %68 = alloca i8, align 1
  %69 = alloca ptr, align 8
  %70 = alloca i8, align 1
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca %"class.__gnu_cxx::__normal_iterator.395", align 8
  %74 = alloca %"class.__gnu_cxx::__normal_iterator.395", align 8
  %75 = alloca ptr, align 8
  %76 = alloca %"struct.HIR::PathParams", align 8
  %77 = alloca %"class.std::function.336", align 8
  %78 = alloca %class.anon.602, align 1
  %79 = alloca i8, align 1
  %80 = alloca ptr, align 8
  %81 = alloca ptr, align 8
  %82 = alloca %"class.__gnu_cxx::__normal_iterator.518", align 8
  %83 = alloca %"class.__gnu_cxx::__normal_iterator.518", align 8
  %84 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  %85 = load ptr, ptr %5, align 8
  %86 = load i32, ptr @gTargetVersion, align 4, !tbaa !9
  %87 = icmp sge i32 %86, 1
  br i1 %87, label %103, label %88

88:                                               ; preds = %3
  br label %89

89:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %90)
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #7
  call void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(1) %10) #7
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef %9)
          to label %91 unwind label %94

91:                                               ; preds = %89
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  %92 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %92, ptr noundef @.str)
          to label %93 unwind label %98

93:                                               ; preds = %91
  call void @__cxa_throw(ptr %92, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #8
  unreachable

94:                                               ; preds = %89
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %11, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  br label %732

98:                                               ; preds = %91
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %11, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %12, align 4
  call void @__cxa_free_exception(ptr %92) #7
  br label %732

102:                                              ; No predecessors!
  br label %103

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

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

107:                                              ; preds = %104
  store i32 4, ptr %14, align 4
  br label %726

108:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %109 = load ptr, ptr %7, align 8, !tbaa !5
  %110 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %109)
  store ptr %110, ptr %15, align 8, !tbaa !5
  br label %111

111:                                              ; preds = %720, %108
  %112 = load i8, ptr %13, align 1, !tbaa !11, !range !13, !noundef !14
  %113 = trunc i8 %112 to i1
  br i1 %113, label %115, label %114

114:                                              ; preds = %111
  store i32 7, ptr %14, align 4
  br label %721

115:                                              ; preds = %111
  %116 = load ptr, ptr %15, align 8, !tbaa !5
  %117 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %116)
  switch i32 %117, label %719 [
    i32 0, label %118
    i32 5, label %119
    i32 4, label %196
    i32 2, label %298
    i32 15, label %320
    i32 16, label %352
    i32 1, label %387
    i32 11, label %409
    i32 12, label %435
    i32 13, label %457
    i32 14, label %479
    i32 3, label %501
    i32 8, label %526
    i32 9, label %564
    i32 6, label %586
    i32 7, label %608
    i32 10, label %672
  ]

118:                                              ; preds = %115
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.5, i32 noundef 2189, ptr noundef @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE) #9
  unreachable

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

120:                                              ; preds = %192, %119
  %121 = load i8, ptr %16, align 1, !tbaa !11, !range !13, !noundef !14
  %122 = trunc i8 %121 to i1
  br i1 %122, label %124, label %123

123:                                              ; preds = %120
  store i32 11, ptr %14, align 4
  br label %193

124:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %125 = load ptr, ptr %15, align 8, !tbaa !5
  %126 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %125)
  store ptr %126, ptr %17, align 8, !tbaa !5
  br label %127

127:                                              ; preds = %188, %124
  %128 = load ptr, ptr %17, align 8, !tbaa !5
  %129 = load i8, ptr %16, align 1, !tbaa !11, !range !13, !noundef !14
  %130 = trunc i8 %129 to i1
  br i1 %130, label %132, label %131

131:                                              ; preds = %127
  store i32 14, ptr %14, align 4
  br label %189

132:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %133 = getelementptr inbounds %class.StaticTraitResolve, ptr %85, i32 0, i32 4
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %133, ptr noundef nonnull align 8 dereferenceable(8) %134)
  %136 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.579", ptr %18, i32 0, i32 0
  store ptr %135, ptr %136, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %137 = getelementptr inbounds %class.StaticTraitResolve, ptr %85, i32 0, i32 4
  %138 = call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %137) #7
  %139 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.579", ptr %19, i32 0, i32 0
  store ptr %138, ptr %139, align 8
  %140 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEES7_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br i1 %140, label %141, label %146

141:                                              ; preds = %132
  %142 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  %143 = getelementptr inbounds %"struct.std::pair.580", ptr %142, i32 0, i32 1
  %144 = load i8, ptr %143, align 8, !tbaa !15, !range !13, !noundef !14
  %145 = trunc i8 %144 to i1
  store i1 %145, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %147

146:                                              ; preds = %132
  store i32 0, ptr %14, align 4
  br label %147

147:                                              ; preds = %146, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  %148 = load i32, ptr %14, align 4
  switch i32 %148, label %189 [
    i32 0, label %149
  ]

149:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #7
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %20)
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #7
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %85, i64 8
  %152 = getelementptr inbounds %struct.TraitResolveCommon, ptr %151, i32 0, i32 6
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #7
  call void @"_ZNSt8functionIFb7ImplRefbEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  %154 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve17find_impl__boundsERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEE(ptr noundef nonnull align 8 dereferenceable(424) %85, ptr noundef nonnull align 8 dereferenceable(8) %150, ptr noundef nonnull align 8 dereferenceable(8) %152, ptr noundef %20, ptr noundef nonnull align 8 dereferenceable(8) %153, ptr noundef %22)
          to label %155 unwind label %169

155:                                              ; preds = %149
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  %156 = zext i1 %154 to i8
  store i8 %156, ptr %21, align 1, !tbaa !11
  %157 = getelementptr inbounds %class.StaticTraitResolve, ptr %85, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %158 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %25, ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %159 unwind label %173

159:                                              ; preds = %155
  invoke void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind writable sret(%"struct.std::pair.588") align 8 %24, ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %160 unwind label %177

160:                                              ; preds = %159
  %161 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %157, ptr noundef nonnull align 8 dereferenceable(9) %24)
          to label %162 unwind label %181

162:                                              ; preds = %160
  %163 = getelementptr inbounds { ptr, i8 }, ptr %26, i32 0, i32 0
  %164 = extractvalue { ptr, i8 } %161, 0
  store ptr %164, ptr %163, align 8
  %165 = getelementptr inbounds { ptr, i8 }, ptr %26, i32 0, i32 1
  %166 = extractvalue { ptr, i8 } %161, 1
  store i8 %166, ptr %165, align 8
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %24) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  %167 = load i8, ptr %21, align 1, !tbaa !11, !range !13, !noundef !14
  %168 = trunc i8 %167 to i1
  store i1 %168, ptr %4, align 1
  store i32 1, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #7
  br label %189

169:                                              ; preds = %149
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %11, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  br label %187

173:                                              ; preds = %155
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %11, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %12, align 4
  br label %186

177:                                              ; preds = %159
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %11, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %12, align 4
  br label %185

181:                                              ; preds = %160
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %11, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %12, align 4
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %24) #7
  br label %185

185:                                              ; preds = %181, %177
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #7
  br label %186

186:                                              ; preds = %185, %173
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  br label %187

187:                                              ; preds = %186, %169
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  br label %723

188:                                              ; No predecessors!
  store i8 0, ptr %16, align 1, !tbaa !11
  br label %127, !llvm.loop !18

189:                                              ; preds = %162, %147, %131
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  %190 = load i32, ptr %14, align 4
  switch i32 %190, label %193 [
    i32 14, label %191
  ]

191:                                              ; preds = %189
  br label %192

192:                                              ; preds = %191
  store i8 0, ptr %16, align 1, !tbaa !11
  br label %120, !llvm.loop !20

193:                                              ; preds = %189, %123
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  %194 = load i32, ptr %14, align 4
  switch i32 %194, label %721 [
    i32 11, label %195
  ]

195:                                              ; preds = %193
  br label %719

196:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #7
  store i8 1, ptr %27, align 1, !tbaa !11
  br label %197

197:                                              ; preds = %294, %196
  %198 = load i8, ptr %27, align 1, !tbaa !11, !range !13, !noundef !14
  %199 = trunc i8 %198 to i1
  br i1 %199, label %201, label %200

200:                                              ; preds = %197
  store i32 17, ptr %14, align 4
  br label %295

201:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %202 = load ptr, ptr %15, align 8, !tbaa !5
  %203 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %202)
  store ptr %203, ptr %28, align 8, !tbaa !5
  br label %204

204:                                              ; preds = %289, %201
  %205 = load ptr, ptr %28, align 8, !tbaa !5
  %206 = load i8, ptr %27, align 1, !tbaa !11, !range !13, !noundef !14
  %207 = trunc i8 %206 to i1
  br i1 %207, label %209, label %208

208:                                              ; preds = %204
  store i32 20, ptr %14, align 4
  br label %290

209:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %210 = getelementptr inbounds %class.StaticTraitResolve, ptr %85, i32 0, i32 4
  %211 = load ptr, ptr %7, align 8, !tbaa !5
  %212 = call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %210, ptr noundef nonnull align 8 dereferenceable(8) %211)
  %213 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.579", ptr %29, i32 0, i32 0
  store ptr %212, ptr %213, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %214 = getelementptr inbounds %class.StaticTraitResolve, ptr %85, i32 0, i32 4
  %215 = call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %214) #7
  %216 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.579", ptr %30, i32 0, i32 0
  store ptr %215, ptr %216, align 8
  %217 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEES7_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br i1 %217, label %218, label %223

218:                                              ; preds = %209
  %219 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #7
  %220 = getelementptr inbounds %"struct.std::pair.580", ptr %219, i32 0, i32 1
  %221 = load i8, ptr %220, align 8, !tbaa !15, !range !13, !noundef !14
  %222 = trunc i8 %221 to i1
  store i1 %222, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %224

223:                                              ; preds = %209
  store i32 0, ptr %14, align 4
  br label %224

224:                                              ; preds = %223, %218
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  %225 = load i32, ptr %14, align 4
  switch i32 %225, label %290 [
    i32 0, label %226
  ]

226:                                              ; preds = %224
  %227 = load ptr, ptr %28, align 8, !tbaa !5
  %228 = call noundef zeroext i1 @_ZNK3HIR13TypeData_Path10is_closureEv(ptr noundef nonnull align 8 dereferenceable(112) %227)
  br i1 %228, label %229, label %250

229:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  store i8 1, ptr %31, align 1, !tbaa !11
  %230 = getelementptr inbounds %class.StaticTraitResolve, ptr %85, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %231 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %33, ptr noundef nonnull align 8 dereferenceable(8) %231)
  invoke void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind writable sret(%"struct.std::pair.588") align 8 %32, ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %232 unwind label %241

232:                                              ; preds = %229
  %233 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %230, ptr noundef nonnull align 8 dereferenceable(9) %32)
          to label %234 unwind label %245

234:                                              ; preds = %232
  %235 = getelementptr inbounds { ptr, i8 }, ptr %34, i32 0, i32 0
  %236 = extractvalue { ptr, i8 } %233, 0
  store ptr %236, ptr %235, align 8
  %237 = getelementptr inbounds { ptr, i8 }, ptr %34, i32 0, i32 1
  %238 = extractvalue { ptr, i8 } %233, 1
  store i8 %238, ptr %237, align 8
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %32) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #7
  %239 = load i8, ptr %31, align 1, !tbaa !11, !range !13, !noundef !14
  %240 = trunc i8 %239 to i1
  store i1 %240, ptr %4, align 1
  store i32 1, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  br label %290

241:                                              ; preds = %229
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %11, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %12, align 4
  br label %249

245:                                              ; preds = %232
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %11, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %12, align 4
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %32) #7
  br label %249

249:                                              ; preds = %245, %241
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  br label %292

250:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #7
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %35)
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #7
  %251 = load ptr, ptr %6, align 8, !tbaa !5
  %252 = getelementptr inbounds i8, ptr %85, i64 8
  %253 = getelementptr inbounds %struct.TraitResolveCommon, ptr %252, i32 0, i32 6
  %254 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #7
  call void @"_ZNSt8functionIFb7ImplRefbEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  %255 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve9find_implERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEEb(ptr noundef nonnull align 8 dereferenceable(424) %85, ptr noundef nonnull align 8 dereferenceable(8) %251, ptr noundef nonnull align 8 dereferenceable(8) %253, ptr noundef %35, ptr noundef nonnull align 8 dereferenceable(8) %254, ptr noundef %37, i1 noundef zeroext true)
          to label %256 unwind label %270

256:                                              ; preds = %250
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #7
  %257 = zext i1 %255 to i8
  store i8 %257, ptr %36, align 1, !tbaa !11
  %258 = getelementptr inbounds %class.StaticTraitResolve, ptr %85, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %40, ptr noundef nonnull align 8 dereferenceable(8) %259)
          to label %260 unwind label %274

260:                                              ; preds = %256
  invoke void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind writable sret(%"struct.std::pair.588") align 8 %39, ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %261 unwind label %278

261:                                              ; preds = %260
  %262 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %258, ptr noundef nonnull align 8 dereferenceable(9) %39)
          to label %263 unwind label %282

263:                                              ; preds = %261
  %264 = getelementptr inbounds { ptr, i8 }, ptr %41, i32 0, i32 0
  %265 = extractvalue { ptr, i8 } %262, 0
  store ptr %265, ptr %264, align 8
  %266 = getelementptr inbounds { ptr, i8 }, ptr %41, i32 0, i32 1
  %267 = extractvalue { ptr, i8 } %262, 1
  store i8 %267, ptr %266, align 8
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %39) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #7
  %268 = load i8, ptr %36, align 1, !tbaa !11, !range !13, !noundef !14
  %269 = trunc i8 %268 to i1
  store i1 %269, ptr %4, align 1
  store i32 1, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #7
  br label %290

270:                                              ; preds = %250
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %11, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #7
  br label %288

274:                                              ; preds = %256
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %11, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %12, align 4
  br label %287

278:                                              ; preds = %260
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %11, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %12, align 4
  br label %286

282:                                              ; preds = %261
  %283 = landingpad { ptr, i32 }
          cleanup
  %284 = extractvalue { ptr, i32 } %283, 0
  store ptr %284, ptr %11, align 8
  %285 = extractvalue { ptr, i32 } %283, 1
  store i32 %285, ptr %12, align 4
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %39) #7
  br label %286

286:                                              ; preds = %282, %278
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #7
  br label %287

287:                                              ; preds = %286, %274
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #7
  br label %288

288:                                              ; preds = %287, %270
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #7
  br label %292

289:                                              ; No predecessors!
  store i8 0, ptr %27, align 1, !tbaa !11
  br label %204, !llvm.loop !21

290:                                              ; preds = %263, %234, %224, %208
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  %291 = load i32, ptr %14, align 4
  switch i32 %291, label %295 [
    i32 20, label %293
  ]

292:                                              ; preds = %288, %249
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  br label %723

293:                                              ; preds = %290
  br label %294

294:                                              ; preds = %293
  store i8 0, ptr %27, align 1, !tbaa !11
  br label %197, !llvm.loop !22

295:                                              ; preds = %290, %200
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  %296 = load i32, ptr %14, align 4
  switch i32 %296, label %721 [
    i32 17, label %297
  ]

297:                                              ; preds = %295
  br label %719

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

299:                                              ; preds = %316, %298
  %300 = load i8, ptr %42, align 1, !tbaa !11, !range !13, !noundef !14
  %301 = trunc i8 %300 to i1
  br i1 %301, label %303, label %302

302:                                              ; preds = %299
  store i32 23, ptr %14, align 4
  br label %317

303:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %304 = load ptr, ptr %15, align 8, !tbaa !5
  %305 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %304)
  store ptr %305, ptr %43, align 8, !tbaa !5
  br label %306

306:                                              ; preds = %312, %303
  %307 = load ptr, ptr %43, align 8, !tbaa !5
  %308 = load i8, ptr %42, align 1, !tbaa !11, !range !13, !noundef !14
  %309 = trunc i8 %308 to i1
  br i1 %309, label %311, label %310

310:                                              ; preds = %306
  store i32 26, ptr %14, align 4
  br label %313

311:                                              ; preds = %306
  store i1 true, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %313

312:                                              ; No predecessors!
  store i8 0, ptr %42, align 1, !tbaa !11
  br label %306, !llvm.loop !23

313:                                              ; preds = %311, %310
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  %314 = load i32, ptr %14, align 4
  switch i32 %314, label %317 [
    i32 26, label %315
  ]

315:                                              ; preds = %313
  br label %316

316:                                              ; preds = %315
  store i8 0, ptr %42, align 1, !tbaa !11
  br label %299, !llvm.loop !24

317:                                              ; preds = %313, %302
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #7
  %318 = load i32, ptr %14, align 4
  switch i32 %318, label %721 [
    i32 23, label %319
  ]

319:                                              ; preds = %317
  br label %719

320:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #7
  store i8 1, ptr %44, align 1, !tbaa !11
  br label %321

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

324:                                              ; preds = %321
  store i32 29, ptr %14, align 4
  br label %349

325:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  %326 = load ptr, ptr %15, align 8, !tbaa !5
  %327 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %326)
  store ptr %327, ptr %45, align 8, !tbaa !5
  br label %328

328:                                              ; preds = %344, %325
  %329 = load ptr, ptr %45, align 8, !tbaa !5
  %330 = load i8, ptr %44, align 1, !tbaa !11, !range !13, !noundef !14
  %331 = trunc i8 %330 to i1
  br i1 %331, label %333, label %332

332:                                              ; preds = %328
  store i32 32, ptr %14, align 4
  br label %345

333:                                              ; preds = %328
  %334 = load i32, ptr @gTargetVersion, align 4, !tbaa !9
  %335 = icmp sge i32 %334, 1
  br i1 %335, label %336, label %343

336:                                              ; preds = %333
  %337 = load ptr, ptr %45, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.HIR::TypeData::Data_Closure", ptr %337, i32 0, i32 0
  %339 = load ptr, ptr %338, align 8, !tbaa !25
  %340 = getelementptr inbounds %"struct.HIR::ExprNode_Closure", ptr %339, i32 0, i32 6
  %341 = load i8, ptr %340, align 8, !tbaa !27, !range !13, !noundef !14
  %342 = trunc i8 %341 to i1
  store i1 %342, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %345

343:                                              ; preds = %333
  store i1 false, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %345

344:                                              ; No predecessors!
  store i8 0, ptr %44, align 1, !tbaa !11
  br label %328, !llvm.loop !65

345:                                              ; preds = %343, %336, %332
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  %346 = load i32, ptr %14, align 4
  switch i32 %346, label %349 [
    i32 32, label %347
  ]

347:                                              ; preds = %345
  br label %348

348:                                              ; preds = %347
  store i8 0, ptr %44, align 1, !tbaa !11
  br label %321, !llvm.loop !66

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

351:                                              ; preds = %349
  br label %719

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

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

356:                                              ; preds = %353
  store i32 35, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #7
  br label %386

357:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %358 = load ptr, ptr %15, align 8, !tbaa !5
  %359 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %358)
  store ptr %359, ptr %47, align 8, !tbaa !5
  br label %360

360:                                              ; preds = %383, %357
  %361 = load ptr, ptr %47, align 8, !tbaa !5
  %362 = load i8, ptr %46, align 1, !tbaa !11, !range !13, !noundef !14
  %363 = trunc i8 %362 to i1
  br i1 %363, label %365, label %364

364:                                              ; preds = %360
  store i32 38, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  br label %384

365:                                              ; preds = %360
  br label %366

366:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  store ptr @__func__._ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %49, ptr noundef nonnull align 8 dereferenceable(8) %367)
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  %368 = getelementptr inbounds %class.anon.601, ptr %51, i32 0, i32 0
  store ptr %48, ptr %368, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(8) %51) #7
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %49, ptr noundef %50)
          to label %369 unwind label %372

369:                                              ; preds = %366
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  %370 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %370, ptr noundef @.str.3)
          to label %371 unwind label %376

371:                                              ; preds = %369
  call void @__cxa_throw(ptr %370, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #8
  unreachable

372:                                              ; preds = %366
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %11, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  br label %380

376:                                              ; preds = %369
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %11, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %12, align 4
  call void @__cxa_free_exception(ptr %370) #7
  br label %380

380:                                              ; preds = %376, %372
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #7
  br label %723

381:                                              ; No predecessors!
  br label %382

382:                                              ; preds = %381
  br label %383

383:                                              ; preds = %382
  store i8 0, ptr %46, align 1, !tbaa !11
  br label %360, !llvm.loop !67

384:                                              ; preds = %364
  br label %385

385:                                              ; preds = %384
  store i8 0, ptr %46, align 1, !tbaa !11
  br label %353, !llvm.loop !68

386:                                              ; preds = %356
  br label %719

387:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #7
  store i8 1, ptr %52, align 1, !tbaa !11
  br label %388

388:                                              ; preds = %405, %387
  %389 = load i8, ptr %52, align 1, !tbaa !11, !range !13, !noundef !14
  %390 = trunc i8 %389 to i1
  br i1 %390, label %392, label %391

391:                                              ; preds = %388
  store i32 43, ptr %14, align 4
  br label %406

392:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  %393 = load ptr, ptr %15, align 8, !tbaa !5
  %394 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %393)
  store ptr %394, ptr %53, align 8, !tbaa !5
  br label %395

395:                                              ; preds = %401, %392
  %396 = load ptr, ptr %53, align 8, !tbaa !5
  %397 = load i8, ptr %52, align 1, !tbaa !11, !range !13, !noundef !14
  %398 = trunc i8 %397 to i1
  br i1 %398, label %400, label %399

399:                                              ; preds = %395
  store i32 46, ptr %14, align 4
  br label %402

400:                                              ; preds = %395
  store i1 false, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %402

401:                                              ; No predecessors!
  store i8 0, ptr %52, align 1, !tbaa !11
  br label %395, !llvm.loop !69

402:                                              ; preds = %400, %399
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  %403 = load i32, ptr %14, align 4
  switch i32 %403, label %406 [
    i32 46, label %404
  ]

404:                                              ; preds = %402
  br label %405

405:                                              ; preds = %404
  store i8 0, ptr %52, align 1, !tbaa !11
  br label %388, !llvm.loop !70

406:                                              ; preds = %402, %391
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #7
  %407 = load i32, ptr %14, align 4
  switch i32 %407, label %721 [
    i32 43, label %408
  ]

408:                                              ; preds = %406
  br label %719

409:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %54) #7
  store i8 1, ptr %54, align 1, !tbaa !11
  br label %410

410:                                              ; preds = %431, %409
  %411 = load i8, ptr %54, align 1, !tbaa !11, !range !13, !noundef !14
  %412 = trunc i8 %411 to i1
  br i1 %412, label %414, label %413

413:                                              ; preds = %410
  store i32 49, ptr %14, align 4
  br label %432

414:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  %415 = load ptr, ptr %15, align 8, !tbaa !5
  %416 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %415)
  store ptr %416, ptr %55, align 8, !tbaa !5
  br label %417

417:                                              ; preds = %427, %414
  %418 = load ptr, ptr %55, align 8, !tbaa !5
  %419 = load i8, ptr %54, align 1, !tbaa !11, !range !13, !noundef !14
  %420 = trunc i8 %419 to i1
  br i1 %420, label %422, label %421

421:                                              ; preds = %417
  store i32 52, ptr %14, align 4
  br label %428

422:                                              ; preds = %417
  %423 = load ptr, ptr %55, align 8, !tbaa !5
  %424 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %423, i32 0, i32 1
  %425 = load i32, ptr %424, align 4, !tbaa !71
  %426 = icmp eq i32 %425, 0
  store i1 %426, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %428

427:                                              ; No predecessors!
  store i8 0, ptr %54, align 1, !tbaa !11
  br label %417, !llvm.loop !74

428:                                              ; preds = %422, %421
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  %429 = load i32, ptr %14, align 4
  switch i32 %429, label %432 [
    i32 52, label %430
  ]

430:                                              ; preds = %428
  br label %431

431:                                              ; preds = %430
  store i8 0, ptr %54, align 1, !tbaa !11
  br label %410, !llvm.loop !75

432:                                              ; preds = %428, %413
  call void @llvm.lifetime.end.p0(i64 1, ptr %54) #7
  %433 = load i32, ptr %14, align 4
  switch i32 %433, label %721 [
    i32 49, label %434
  ]

434:                                              ; preds = %432
  br label %719

435:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #7
  store i8 1, ptr %56, align 1, !tbaa !11
  br label %436

436:                                              ; preds = %453, %435
  %437 = load i8, ptr %56, align 1, !tbaa !11, !range !13, !noundef !14
  %438 = trunc i8 %437 to i1
  br i1 %438, label %440, label %439

439:                                              ; preds = %436
  store i32 55, ptr %14, align 4
  br label %454

440:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #7
  %441 = load ptr, ptr %15, align 8, !tbaa !5
  %442 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %441)
  store ptr %442, ptr %57, align 8, !tbaa !5
  br label %443

443:                                              ; preds = %449, %440
  %444 = load ptr, ptr %57, align 8, !tbaa !5
  %445 = load i8, ptr %56, align 1, !tbaa !11, !range !13, !noundef !14
  %446 = trunc i8 %445 to i1
  br i1 %446, label %448, label %447

447:                                              ; preds = %443
  store i32 58, ptr %14, align 4
  br label %450

448:                                              ; preds = %443
  store i1 true, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %450

449:                                              ; No predecessors!
  store i8 0, ptr %56, align 1, !tbaa !11
  br label %443, !llvm.loop !76

450:                                              ; preds = %448, %447
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #7
  %451 = load i32, ptr %14, align 4
  switch i32 %451, label %454 [
    i32 58, label %452
  ]

452:                                              ; preds = %450
  br label %453

453:                                              ; preds = %452
  store i8 0, ptr %56, align 1, !tbaa !11
  br label %436, !llvm.loop !77

454:                                              ; preds = %450, %439
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #7
  %455 = load i32, ptr %14, align 4
  switch i32 %455, label %721 [
    i32 55, label %456
  ]

456:                                              ; preds = %454
  br label %719

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

458:                                              ; preds = %475, %457
  %459 = load i8, ptr %58, align 1, !tbaa !11, !range !13, !noundef !14
  %460 = trunc i8 %459 to i1
  br i1 %460, label %462, label %461

461:                                              ; preds = %458
  store i32 61, ptr %14, align 4
  br label %476

462:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  %463 = load ptr, ptr %15, align 8, !tbaa !5
  %464 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %463)
  store ptr %464, ptr %59, align 8, !tbaa !5
  br label %465

465:                                              ; preds = %471, %462
  %466 = load ptr, ptr %59, align 8, !tbaa !5
  %467 = load i8, ptr %58, align 1, !tbaa !11, !range !13, !noundef !14
  %468 = trunc i8 %467 to i1
  br i1 %468, label %470, label %469

469:                                              ; preds = %465
  store i32 64, ptr %14, align 4
  br label %472

470:                                              ; preds = %465
  store i1 true, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %472

471:                                              ; No predecessors!
  store i8 0, ptr %58, align 1, !tbaa !11
  br label %465, !llvm.loop !78

472:                                              ; preds = %470, %469
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  %473 = load i32, ptr %14, align 4
  switch i32 %473, label %476 [
    i32 64, label %474
  ]

474:                                              ; preds = %472
  br label %475

475:                                              ; preds = %474
  store i8 0, ptr %58, align 1, !tbaa !11
  br label %458, !llvm.loop !79

476:                                              ; preds = %472, %461
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #7
  %477 = load i32, ptr %14, align 4
  switch i32 %477, label %721 [
    i32 61, label %478
  ]

478:                                              ; preds = %476
  br label %719

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

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

483:                                              ; preds = %480
  store i32 67, ptr %14, align 4
  br label %498

484:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  %485 = load ptr, ptr %15, align 8, !tbaa !5
  %486 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %485)
  store ptr %486, ptr %61, align 8, !tbaa !5
  br label %487

487:                                              ; preds = %493, %484
  %488 = load ptr, ptr %61, align 8, !tbaa !5
  %489 = load i8, ptr %60, align 1, !tbaa !11, !range !13, !noundef !14
  %490 = trunc i8 %489 to i1
  br i1 %490, label %492, label %491

491:                                              ; preds = %487
  store i32 70, ptr %14, align 4
  br label %494

492:                                              ; preds = %487
  store i1 true, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %494

493:                                              ; No predecessors!
  store i8 0, ptr %60, align 1, !tbaa !11
  br label %487, !llvm.loop !80

494:                                              ; preds = %492, %491
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  %495 = load i32, ptr %14, align 4
  switch i32 %495, label %498 [
    i32 70, label %496
  ]

496:                                              ; preds = %494
  br label %497

497:                                              ; preds = %496
  store i8 0, ptr %60, align 1, !tbaa !11
  br label %480, !llvm.loop !81

498:                                              ; preds = %494, %483
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #7
  %499 = load i32, ptr %14, align 4
  switch i32 %499, label %721 [
    i32 67, label %500
  ]

500:                                              ; preds = %498
  br label %719

501:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #7
  store i8 1, ptr %62, align 1, !tbaa !11
  br label %502

502:                                              ; preds = %522, %501
  %503 = load i8, ptr %62, align 1, !tbaa !11, !range !13, !noundef !14
  %504 = trunc i8 %503 to i1
  br i1 %504, label %506, label %505

505:                                              ; preds = %502
  store i32 73, ptr %14, align 4
  br label %523

506:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %507 = load ptr, ptr %15, align 8, !tbaa !5
  %508 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %507)
  store ptr %508, ptr %63, align 8, !tbaa !5
  br label %509

509:                                              ; preds = %518, %506
  %510 = load ptr, ptr %63, align 8, !tbaa !5
  %511 = load i8, ptr %62, align 1, !tbaa !11, !range !13, !noundef !14
  %512 = trunc i8 %511 to i1
  br i1 %512, label %514, label %513

513:                                              ; preds = %509
  store i32 76, ptr %14, align 4
  br label %519

514:                                              ; preds = %509
  %515 = load ptr, ptr %63, align 8, !tbaa !5
  %516 = load i32, ptr %515, align 4, !tbaa !82
  %517 = icmp ne i32 %516, 16
  store i1 %517, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %519

518:                                              ; No predecessors!
  store i8 0, ptr %62, align 1, !tbaa !11
  br label %509, !llvm.loop !84

519:                                              ; preds = %514, %513
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  %520 = load i32, ptr %14, align 4
  switch i32 %520, label %523 [
    i32 76, label %521
  ]

521:                                              ; preds = %519
  br label %522

522:                                              ; preds = %521
  store i8 0, ptr %62, align 1, !tbaa !11
  br label %502, !llvm.loop !85

523:                                              ; preds = %519, %505
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #7
  %524 = load i32, ptr %14, align 4
  switch i32 %524, label %721 [
    i32 73, label %525
  ]

525:                                              ; preds = %523
  br label %719

526:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #7
  store i8 1, ptr %64, align 1, !tbaa !11
  br label %527

527:                                              ; preds = %560, %526
  %528 = load i8, ptr %64, align 1, !tbaa !11, !range !13, !noundef !14
  %529 = trunc i8 %528 to i1
  br i1 %529, label %531, label %530

530:                                              ; preds = %527
  store i32 79, ptr %14, align 4
  br label %561

531:                                              ; preds = %527
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  %532 = load ptr, ptr %15, align 8, !tbaa !5
  %533 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %532)
  store ptr %533, ptr %65, align 8, !tbaa !5
  br label %534

534:                                              ; preds = %556, %531
  %535 = load ptr, ptr %65, align 8, !tbaa !5
  %536 = load i8, ptr %64, align 1, !tbaa !11, !range !13, !noundef !14
  %537 = trunc i8 %536 to i1
  br i1 %537, label %539, label %538

538:                                              ; preds = %534
  store i32 82, ptr %14, align 4
  br label %557

539:                                              ; preds = %534
  %540 = load ptr, ptr %65, align 8, !tbaa !5
  %541 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %540, i32 0, i32 1
  %542 = call noundef zeroext i1 @_ZNK3HIR9ArraySize8is_KnownEv(ptr noundef nonnull align 8 dereferenceable(32) %541)
  br i1 %542, label %543, label %549

543:                                              ; preds = %539
  %544 = load ptr, ptr %65, align 8, !tbaa !5
  %545 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %544, i32 0, i32 1
  %546 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR9ArraySize8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(32) %545)
  %547 = load i64, ptr %546, align 8, !tbaa !86
  %548 = icmp eq i64 %547, 0
  br i1 %548, label %554, label %549

549:                                              ; preds = %543, %539
  %550 = load ptr, ptr %6, align 8, !tbaa !5
  %551 = load ptr, ptr %65, align 8, !tbaa !5
  %552 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %551, i32 0, i32 0
  %553 = call noundef zeroext i1 @_ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %85, ptr noundef nonnull align 8 dereferenceable(8) %550, ptr noundef nonnull align 8 dereferenceable(8) %552)
  br label %554

554:                                              ; preds = %549, %543
  %555 = phi i1 [ true, %543 ], [ %553, %549 ]
  store i1 %555, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %557

556:                                              ; No predecessors!
  store i8 0, ptr %64, align 1, !tbaa !11
  br label %534, !llvm.loop !88

557:                                              ; preds = %554, %538
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  %558 = load i32, ptr %14, align 4
  switch i32 %558, label %561 [
    i32 82, label %559
  ]

559:                                              ; preds = %557
  br label %560

560:                                              ; preds = %559
  store i8 0, ptr %64, align 1, !tbaa !11
  br label %527, !llvm.loop !89

561:                                              ; preds = %557, %530
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #7
  %562 = load i32, ptr %14, align 4
  switch i32 %562, label %721 [
    i32 79, label %563
  ]

563:                                              ; preds = %561
  br label %719

564:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #7
  store i8 1, ptr %66, align 1, !tbaa !11
  br label %565

565:                                              ; preds = %582, %564
  %566 = load i8, ptr %66, align 1, !tbaa !11, !range !13, !noundef !14
  %567 = trunc i8 %566 to i1
  br i1 %567, label %569, label %568

568:                                              ; preds = %565
  store i32 85, ptr %14, align 4
  br label %583

569:                                              ; preds = %565
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #7
  %570 = load ptr, ptr %15, align 8, !tbaa !5
  %571 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %570)
  store ptr %571, ptr %67, align 8, !tbaa !5
  br label %572

572:                                              ; preds = %578, %569
  %573 = load ptr, ptr %67, align 8, !tbaa !5
  %574 = load i8, ptr %66, align 1, !tbaa !11, !range !13, !noundef !14
  %575 = trunc i8 %574 to i1
  br i1 %575, label %577, label %576

576:                                              ; preds = %572
  store i32 88, ptr %14, align 4
  br label %579

577:                                              ; preds = %572
  store i1 false, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %579

578:                                              ; No predecessors!
  store i8 0, ptr %66, align 1, !tbaa !11
  br label %572, !llvm.loop !90

579:                                              ; preds = %577, %576
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  %580 = load i32, ptr %14, align 4
  switch i32 %580, label %583 [
    i32 88, label %581
  ]

581:                                              ; preds = %579
  br label %582

582:                                              ; preds = %581
  store i8 0, ptr %66, align 1, !tbaa !11
  br label %565, !llvm.loop !91

583:                                              ; preds = %579, %568
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #7
  %584 = load i32, ptr %14, align 4
  switch i32 %584, label %721 [
    i32 85, label %585
  ]

585:                                              ; preds = %583
  br label %719

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

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

590:                                              ; preds = %587
  store i32 91, ptr %14, align 4
  br label %605

591:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #7
  %592 = load ptr, ptr %15, align 8, !tbaa !5
  %593 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %592)
  store ptr %593, ptr %69, align 8, !tbaa !5
  br label %594

594:                                              ; preds = %600, %591
  %595 = load ptr, ptr %69, align 8, !tbaa !5
  %596 = load i8, ptr %68, align 1, !tbaa !11, !range !13, !noundef !14
  %597 = trunc i8 %596 to i1
  br i1 %597, label %599, label %598

598:                                              ; preds = %594
  store i32 94, ptr %14, align 4
  br label %601

599:                                              ; preds = %594
  store i1 false, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %601

600:                                              ; No predecessors!
  store i8 0, ptr %68, align 1, !tbaa !11
  br label %594, !llvm.loop !92

601:                                              ; preds = %599, %598
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #7
  %602 = load i32, ptr %14, align 4
  switch i32 %602, label %605 [
    i32 94, label %603
  ]

603:                                              ; preds = %601
  br label %604

604:                                              ; preds = %603
  store i8 0, ptr %68, align 1, !tbaa !11
  br label %587, !llvm.loop !93

605:                                              ; preds = %601, %590
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #7
  %606 = load i32, ptr %14, align 4
  switch i32 %606, label %721 [
    i32 91, label %607
  ]

607:                                              ; preds = %605
  br label %719

608:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 1, ptr %70) #7
  store i8 1, ptr %70, align 1, !tbaa !11
  br label %609

609:                                              ; preds = %668, %608
  %610 = load i8, ptr %70, align 1, !tbaa !11, !range !13, !noundef !14
  %611 = trunc i8 %610 to i1
  br i1 %611, label %613, label %612

612:                                              ; preds = %609
  store i32 97, ptr %14, align 4
  br label %669

613:                                              ; preds = %609
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #7
  %614 = load ptr, ptr %15, align 8, !tbaa !5
  %615 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %614)
  store ptr %615, ptr %71, align 8, !tbaa !5
  br label %616

616:                                              ; preds = %664, %613
  %617 = load ptr, ptr %71, align 8, !tbaa !5
  %618 = load i8, ptr %70, align 1, !tbaa !11, !range !13, !noundef !14
  %619 = trunc i8 %618 to i1
  br i1 %619, label %621, label %620

620:                                              ; preds = %616
  store i32 100, ptr %14, align 4
  br label %665

621:                                              ; preds = %616
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #7
  %622 = load ptr, ptr %71, align 8, !tbaa !5
  %623 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %622, i32 0, i32 1
  store ptr %623, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #7
  %624 = load ptr, ptr %72, align 8, !tbaa !5
  %625 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %624) #7
  %626 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.395", ptr %73, i32 0, i32 0
  store ptr %625, ptr %626, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #7
  %627 = load ptr, ptr %72, align 8, !tbaa !5
  %628 = call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %627) #7
  %629 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.395", ptr %74, i32 0, i32 0
  store ptr %628, ptr %629, align 8
  br label %630

630:                                              ; preds = %659, %621
  %631 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %73, ptr noundef nonnull align 8 dereferenceable(8) %74) #7
  br i1 %631, label %633, label %632

632:                                              ; preds = %630
  store i32 103, ptr %14, align 4
  br label %661

633:                                              ; preds = %630
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #7
  %634 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %73) #7
  store ptr %634, ptr %75, align 8, !tbaa !5
  %635 = load ptr, ptr %6, align 8, !tbaa !5
  %636 = getelementptr inbounds i8, ptr %85, i64 8
  %637 = getelementptr inbounds %struct.TraitResolveCommon, ptr %636, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 24, ptr %76) #7
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %76)
  %638 = load ptr, ptr %75, align 8, !tbaa !5
  %639 = getelementptr inbounds %"class.HIR::TraitPath", ptr %638, i32 0, i32 4
  %640 = load ptr, ptr %639, align 8, !tbaa !94
  %641 = load ptr, ptr %75, align 8, !tbaa !5
  %642 = getelementptr inbounds %"class.HIR::TraitPath", ptr %641, i32 0, i32 1
  %643 = getelementptr inbounds %"class.HIR::GenericPath", ptr %642, i32 0, i32 0
  %644 = load ptr, ptr %75, align 8, !tbaa !5
  %645 = getelementptr inbounds %"class.HIR::TraitPath", ptr %644, i32 0, i32 1
  %646 = getelementptr inbounds %"class.HIR::GenericPath", ptr %645, i32 0, i32 1
  %647 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %78) #7
  call void @"_ZNSt8functionIFbRKN3HIR10PathParamsESt3mapI8RcStringNS0_9TraitPath8AtyEqualESt4lessIS5_ESaISt4pairIKS5_S7_EEEEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKNS0_7TypeRefEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull align 1 dereferenceable(1) %78) #7
  %648 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve25find_named_trait_in_traitERK4SpanRKN3HIR10SimplePathERKNS3_10PathParamsERKNS3_5TraitES6_S9_RKNS3_7TypeRefESt8functionIFbS9_St3mapI8RcStringNS3_9TraitPath8AtyEqualESt4lessISI_ESaISt4pairIKSI_SK_EEEEE(ptr noundef nonnull align 8 dereferenceable(424) %85, ptr noundef nonnull align 8 dereferenceable(8) %635, ptr noundef nonnull align 8 dereferenceable(8) %637, ptr noundef nonnull align 8 dereferenceable(24) %76, ptr noundef nonnull align 8 dereferenceable(400) %640, ptr noundef nonnull align 8 dereferenceable(8) %643, ptr noundef nonnull align 8 dereferenceable(24) %646, ptr noundef nonnull align 8 dereferenceable(8) %647, ptr noundef %77)
          to label %649 unwind label %651

649:                                              ; preds = %633
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %78) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %76) #7
  br i1 %648, label %650, label %655

650:                                              ; preds = %649
  store i1 true, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %656

651:                                              ; preds = %633
  %652 = landingpad { ptr, i32 }
          cleanup
  %653 = extractvalue { ptr, i32 } %652, 0
  store ptr %653, ptr %11, align 8
  %654 = extractvalue { ptr, i32 } %652, 1
  store i32 %654, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %78) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %76) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #7
  br label %723

655:                                              ; preds = %649
  store i32 0, ptr %14, align 4
  br label %656

656:                                              ; preds = %655, %650
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  %657 = load i32, ptr %14, align 4
  switch i32 %657, label %661 [
    i32 0, label %658
  ]

658:                                              ; preds = %656
  br label %659

659:                                              ; preds = %658
  %660 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %73) #7
  br label %630

661:                                              ; preds = %656, %632
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  %662 = load i32, ptr %14, align 4
  switch i32 %662, label %665 [
    i32 103, label %663
  ]

663:                                              ; preds = %661
  store i1 false, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %665

664:                                              ; No predecessors!
  store i8 0, ptr %70, align 1, !tbaa !11
  br label %616, !llvm.loop !113

665:                                              ; preds = %663, %661, %620
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  %666 = load i32, ptr %14, align 4
  switch i32 %666, label %669 [
    i32 100, label %667
  ]

667:                                              ; preds = %665
  br label %668

668:                                              ; preds = %667
  store i8 0, ptr %70, align 1, !tbaa !11
  br label %609, !llvm.loop !114

669:                                              ; preds = %665, %612
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #7
  %670 = load i32, ptr %14, align 4
  switch i32 %670, label %721 [
    i32 97, label %671
  ]

671:                                              ; preds = %669
  br label %719

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

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

676:                                              ; preds = %673
  store i32 105, ptr %14, align 4
  br label %716

677:                                              ; preds = %673
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #7
  %678 = load ptr, ptr %15, align 8, !tbaa !5
  %679 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %678)
  store ptr %679, ptr %80, align 8, !tbaa !5
  br label %680

680:                                              ; preds = %711, %677
  %681 = load ptr, ptr %80, align 8, !tbaa !5
  %682 = load i8, ptr %79, align 1, !tbaa !11, !range !13, !noundef !14
  %683 = trunc i8 %682 to i1
  br i1 %683, label %685, label %684

684:                                              ; preds = %680
  store i32 108, ptr %14, align 4
  br label %712

685:                                              ; preds = %680
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  %686 = load ptr, ptr %80, align 8, !tbaa !5
  store ptr %686, ptr %81, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #7
  %687 = load ptr, ptr %81, align 8, !tbaa !5
  %688 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %687) #7
  %689 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.518", ptr %82, i32 0, i32 0
  store ptr %688, ptr %689, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #7
  %690 = load ptr, ptr %81, align 8, !tbaa !5
  %691 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %690) #7
  %692 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.518", ptr %83, i32 0, i32 0
  store ptr %691, ptr %692, align 8
  br label %693

693:                                              ; preds = %706, %685
  %694 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %82, ptr noundef nonnull align 8 dereferenceable(8) %83) #7
  br i1 %694, label %696, label %695

695:                                              ; preds = %693
  store i32 111, ptr %14, align 4
  br label %708

696:                                              ; preds = %693
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #7
  %697 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %82) #7
  store ptr %697, ptr %84, align 8, !tbaa !5
  %698 = load ptr, ptr %6, align 8, !tbaa !5
  %699 = load ptr, ptr %84, align 8, !tbaa !5
  %700 = call noundef zeroext i1 @_ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %85, ptr noundef nonnull align 8 dereferenceable(8) %698, ptr noundef nonnull align 8 dereferenceable(8) %699)
  br i1 %700, label %702, label %701

701:                                              ; preds = %696
  store i1 false, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %703

702:                                              ; preds = %696
  store i32 0, ptr %14, align 4
  br label %703

703:                                              ; preds = %702, %701
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  %704 = load i32, ptr %14, align 4
  switch i32 %704, label %708 [
    i32 0, label %705
  ]

705:                                              ; preds = %703
  br label %706

706:                                              ; preds = %705
  %707 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %82) #7
  br label %693

708:                                              ; preds = %703, %695
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  %709 = load i32, ptr %14, align 4
  switch i32 %709, label %712 [
    i32 111, label %710
  ]

710:                                              ; preds = %708
  store i1 true, ptr %4, align 1
  store i32 1, ptr %14, align 4
  br label %712

711:                                              ; No predecessors!
  store i8 0, ptr %79, align 1, !tbaa !11
  br label %680, !llvm.loop !115

712:                                              ; preds = %710, %708, %684
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #7
  %713 = load i32, ptr %14, align 4
  switch i32 %713, label %716 [
    i32 108, label %714
  ]

714:                                              ; preds = %712
  br label %715

715:                                              ; preds = %714
  store i8 0, ptr %79, align 1, !tbaa !11
  br label %673, !llvm.loop !116

716:                                              ; preds = %712, %676
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #7
  %717 = load i32, ptr %14, align 4
  switch i32 %717, label %721 [
    i32 105, label %718
  ]

718:                                              ; preds = %716
  br label %719

719:                                              ; preds = %718, %671, %607, %585, %563, %525, %500, %478, %456, %434, %408, %386, %351, %319, %297, %195, %115
  br label %720

720:                                              ; preds = %719
  store i8 0, ptr %13, align 1, !tbaa !11
  br label %111, !llvm.loop !117

721:                                              ; preds = %716, %669, %605, %583, %561, %523, %498, %476, %454, %432, %406, %349, %317, %295, %193, %114
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  %722 = load i32, ptr %14, align 4
  switch i32 %722, label %726 [
    i32 7, label %724
  ]

723:                                              ; preds = %651, %380, %292, %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  br label %732

724:                                              ; preds = %721
  br label %725

725:                                              ; preds = %724
  store i8 0, ptr %13, align 1, !tbaa !11
  br label %104, !llvm.loop !118

726:                                              ; preds = %721, %107
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  %727 = load i32, ptr %14, align 4
  switch i32 %727, label %737 [
    i32 4, label %728
    i32 1, label %730
  ]

728:                                              ; preds = %726
  %729 = call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.74, ptr %729, align 16, !tbaa !5
  call void @__cxa_throw(ptr %729, ptr @_ZTIPKc, ptr null) #8
  unreachable

730:                                              ; preds = %726
  %731 = load i1, ptr %4, align 1
  ret i1 %731

732:                                              ; preds = %723, %98, %94
  %733 = load ptr, ptr %11, align 8
  %734 = load i32, ptr %12, align 4
  %735 = insertvalue { ptr, i32 } poison, ptr %733, 0
  %736 = insertvalue { ptr, i32 } %735, i32 %734, 1
  resume { ptr, i32 } %736

737:                                              ; preds = %726
  unreachable
}

declare void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve25find_named_trait_in_traitERK4SpanRKN3HIR10SimplePathERKNS3_10PathParamsERKNS3_5TraitES6_S9_RKNS3_7TypeRefESt8functionIFbS9_St3mapI8RcStringNS3_9TraitPath8AtyEqualESt4lessISI_ESaISt4pairIKSI_SK_EEEEE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(400), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0 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)) #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve17find_impl__boundsERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0 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)) #4 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(9)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.588") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) #0

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTS13TargetVersion", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !12, i64 8}
!16 = !{!"_ZTSSt4pairIKN3HIR7TypeRefEbE", !17, i64 0, !12, i64 8}
!17 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = !{!26, !6, i64 0}
!26 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !6, i64 0}
!27 = !{!28, !12, i64 80}
!28 = !{!"_ZTSN3HIR16ExprNode_ClosureE", !29, i64 0, !32, i64 32, !17, i64 56, !36, i64 64, !12, i64 72, !42, i64 76, !12, i64 80, !43, i64 88, !52, i64 136, !6, i64 144, !54, i64 152, !54, i64 184, !61, i64 216}
!29 = !{!"_ZTSN3HIR8ExprNodeE", !30, i64 8, !17, i64 16, !31, i64 24}
!30 = !{!"_ZTS4Span", !6, i64 0}
!31 = !{!"_ZTSN3HIR10ValueUsageE", !7, i64 0}
!32 = !{!"_ZTSSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!36 = !{!"_ZTSSt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS1_EE", !37, i64 0}
!37 = !{!"_ZTSSt15__uniq_ptr_dataIN3HIR8ExprNodeESt14default_deleteIS1_ELb1ELb1EE", !38, i64 0}
!38 = !{!"_ZTSSt15__uniq_ptr_implIN3HIR8ExprNodeESt14default_deleteIS1_EE", !39, i64 0}
!39 = !{!"_ZTSSt5tupleIJPN3HIR8ExprNodeESt14default_deleteIS1_EEE", !40, i64 0}
!40 = !{!"_ZTSSt11_Tuple_implILm0EJPN3HIR8ExprNodeESt14default_deleteIS1_EEE", !41, i64 0}
!41 = !{!"_ZTSSt10_Head_baseILm0EPN3HIR8ExprNodeELb0EE", !6, i64 0}
!42 = !{!"_ZTSN3HIR16ExprNode_Closure5ClassE", !7, i64 0}
!43 = !{!"_ZTSN3HIR16ExprNode_Closure8AvuCacheE", !44, i64 0, !48, i64 24}
!44 = !{!"_ZTSSt6vectorIjSaIjEE", !45, i64 0}
!45 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!48 = !{!"_ZTSSt6vectorIN3HIR16ExprNode_Closure8AvuCache7CaptureESaIS3_EE", !49, i64 0}
!49 = !{!"_ZTSSt12_Vector_baseIN3HIR16ExprNode_Closure8AvuCache7CaptureESaIS3_EE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIN3HIR16ExprNode_Closure8AvuCache7CaptureESaIS3_EE12_Vector_implE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIN3HIR16ExprNode_Closure8AvuCache7CaptureESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!52 = !{!"_ZTSN3HIR11LifetimeRefE", !53, i64 0}
!53 = !{!"int", !7, i64 0}
!54 = !{!"_ZTSN3HIR11GenericPathE", !55, i64 0, !57, i64 8}
!55 = !{!"_ZTSN3HIR10SimplePathE", !56, i64 0}
!56 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!57 = !{!"_ZTSN3HIR10PathParamsE", !58, i64 0, !59, i64 8, !60, i64 16}
!58 = !{!"_ZTS10ThinVectorIN3HIR11LifetimeRefEE", !6, i64 0}
!59 = !{!"_ZTS10ThinVectorIN3HIR7TypeRefEE", !6, i64 0}
!60 = !{!"_ZTS10ThinVectorIN3HIR12ConstGenericEE", !6, i64 0}
!61 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS2_EESaIS5_EE", !62, i64 0}
!62 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS2_EESaIS5_EE", !63, i64 0}
!63 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!65 = distinct !{!65, !19}
!66 = distinct !{!66, !19}
!67 = distinct !{!67, !19}
!68 = distinct !{!68, !19}
!69 = distinct !{!69, !19}
!70 = distinct !{!70, !19}
!71 = !{!72, !73, i64 4}
!72 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !52, i64 0, !73, i64 4, !17, i64 8}
!73 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!74 = distinct !{!74, !19}
!75 = distinct !{!75, !19}
!76 = distinct !{!76, !19}
!77 = distinct !{!77, !19}
!78 = distinct !{!78, !19}
!79 = distinct !{!79, !19}
!80 = distinct !{!80, !19}
!81 = distinct !{!81, !19}
!82 = !{!83, !83, i64 0}
!83 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!84 = distinct !{!84, !19}
!85 = distinct !{!85, !19}
!86 = !{!87, !87, i64 0}
!87 = !{!"long", !7, i64 0}
!88 = distinct !{!88, !19}
!89 = distinct !{!89, !19}
!90 = distinct !{!90, !19}
!91 = distinct !{!91, !19}
!92 = distinct !{!92, !19}
!93 = distinct !{!93, !19}
!94 = !{!95, !6, i64 136}
!95 = !{!"_ZTSN3HIR9TraitPathE", !96, i64 0, !54, i64 8, !102, i64 40, !110, i64 88, !6, i64 136}
!96 = !{!"_ZTSSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EE", !97, i64 0}
!97 = !{!"_ZTSSt15__uniq_ptr_dataIN3HIR13GenericParamsESt14default_deleteIS1_ELb1ELb1EE", !98, i64 0}
!98 = !{!"_ZTSSt15__uniq_ptr_implIN3HIR13GenericParamsESt14default_deleteIS1_EE", !99, i64 0}
!99 = !{!"_ZTSSt5tupleIJPN3HIR13GenericParamsESt14default_deleteIS1_EEE", !100, i64 0}
!100 = !{!"_ZTSSt11_Tuple_implILm0EJPN3HIR13GenericParamsESt14default_deleteIS1_EEE", !101, i64 0}
!101 = !{!"_ZTSSt10_Head_baseILm0EPN3HIR13GenericParamsELb0EE", !6, i64 0}
!102 = !{!"_ZTSSt3mapI8RcStringN3HIR9TraitPath8AtyEqualESt4lessIS0_ESaISt4pairIKS0_S3_EEE", !103, i64 0}
!103 = !{!"_ZTSSt8_Rb_treeI8RcStringSt4pairIKS0_N3HIR9TraitPath8AtyEqualEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE", !104, i64 0}
!104 = !{!"_ZTSNSt8_Rb_treeI8RcStringSt4pairIKS0_N3HIR9TraitPath8AtyEqualEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !105, i64 0, !107, i64 8}
!105 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessI8RcStringEE", !106, i64 0}
!106 = !{!"_ZTSSt4lessI8RcStringE"}
!107 = !{!"_ZTSSt15_Rb_tree_header", !108, i64 0, !87, i64 32}
!108 = !{!"_ZTSSt18_Rb_tree_node_base", !109, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!109 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!110 = !{!"_ZTSSt3mapI8RcStringN3HIR9TraitPath8AtyBoundESt4lessIS0_ESaISt4pairIKS0_S3_EEE", !111, i64 0}
!111 = !{!"_ZTSSt8_Rb_treeI8RcStringSt4pairIKS0_N3HIR9TraitPath8AtyBoundEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE", !112, i64 0}
!112 = !{!"_ZTSNSt8_Rb_treeI8RcStringSt4pairIKS0_N3HIR9TraitPath8AtyBoundEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !105, i64 0, !107, i64 8}
!113 = distinct !{!113, !19}
!114 = distinct !{!114, !19}
!115 = distinct !{!115, !19}
!116 = distinct !{!116, !19}
!117 = distinct !{!117, !19}
!118 = distinct !{!118, !19}


; 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"

%struct.Span = type { ptr }
%"class.std::function.0" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.595 = type { i8 }
%"struct.std::_Rb_tree_iterator.579" = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.17, %class.ThinVector.18, %class.ThinVector.19 }
%class.ThinVector.17 = type { ptr }
%class.ThinVector.18 = type { ptr }
%class.ThinVector.19 = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%class.anon.597 = type { i8 }
%"struct.std::pair.588" = type <{ %"class.HIR::TypeRef", i8, [7 x i8] }>
%"class.HIR::TypeRef" = type { ptr }
%class.anon.599 = type { i8 }
%class.anon.601 = type { ptr }
%"class.__gnu_cxx::__normal_iterator.395" = type { ptr }
%"class.std::function.336" = type { %"class.std::_Function_base", ptr }
%class.anon.602 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.518" = type { ptr }

@gTargetVersion = external local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@__PRETTY_FUNCTION__._ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE = external hidden unnamed_addr constant [83 x i8], align 1
@__func__._ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE = external hidden unnamed_addr constant [14 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR13TypeData_Path10is_closureEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
.split396:
  %3 = alloca %struct.Span, align 8
  %4 = alloca %"class.std::function.0", align 8
  %5 = alloca %class.anon.595, align 1
  %6 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %7 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %8 = alloca %"struct.HIR::PathParams", align 8
  %9 = alloca i8, align 1
  %10 = alloca %"class.std::function", align 8
  %11 = alloca %class.anon.597, align 1
  %12 = alloca %"struct.std::pair.588", align 8
  %13 = alloca %"class.HIR::TypeRef", align 8
  %14 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %15 = alloca %"struct.std::_Rb_tree_iterator.579", align 8
  %16 = alloca i8, align 1
  %17 = alloca %"struct.std::pair.588", align 8
  %18 = alloca %"class.HIR::TypeRef", align 8
  %19 = alloca %"struct.HIR::PathParams", align 8
  %20 = alloca i8, align 1
  %21 = alloca %"class.std::function", align 8
  %22 = alloca %class.anon.599, align 1
  %23 = alloca %"struct.std::pair.588", align 8
  %24 = alloca %"class.HIR::TypeRef", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %struct.Span, align 8
  %27 = alloca %"class.std::function.0", align 8
  %28 = alloca %class.anon.601, align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.395", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.395", align 8
  %31 = alloca %"struct.HIR::PathParams", align 8
  %32 = alloca %"class.std::function.336", align 8
  %33 = alloca %class.anon.602, align 1
  %34 = alloca %"class.__gnu_cxx::__normal_iterator.518", align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.518", align 8
  %36 = load i32, ptr @gTargetVersion, align 4, !tbaa !5
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %.preheader, label %tailrecurse._crit_edge

.preheader:                                       ; preds = %.split396, %tailrecurse
  %.tr310397 = phi ptr [ %151, %tailrecurse ], [ %2, %.split396 ]
  %38 = tail call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %.tr310397)
  %39 = tail call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  switch i32 %39, label %.thread285 [
    i32 0, label %.split
    i32 5, label %.split347
    i32 4, label %.split350
    i32 2, label %.split354
    i32 15, label %.split357
    i32 16, label %.split360
    i32 1, label %.split363
    i32 11, label %.split366
    i32 12, label %.split369
    i32 13, label %.split372
    i32 14, label %.split375
    i32 3, label %.split378
    i32 8, label %.split381
    i32 9, label %.split384
    i32 6, label %.split387
    i32 7, label %.split390
    i32 10, label %.split394
  ], !llvm.loop !9

tailrecurse._crit_edge:                           ; preds = %tailrecurse, %.split396
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #7
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #7
  call void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull %4)
          to label %40 unwind label %43

40:                                               ; preds = %tailrecurse._crit_edge
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  %41 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %41, ptr noundef nonnull @.str)
          to label %42 unwind label %45

42:                                               ; preds = %40
  call void @__cxa_throw(ptr nonnull %41, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #8
  unreachable

43:                                               ; preds = %tailrecurse._crit_edge
  %44 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  br label %191

45:                                               ; preds = %40
  %46 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %41) #7
  br label %191

.split:                                           ; preds = %.preheader
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, i32 noundef 2189, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE) #9
  unreachable

.split347:                                        ; preds = %.preheader
  %47 = tail call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %48 = getelementptr inbounds i8, ptr %0, i64 280
  %49 = tail call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %48, ptr noundef nonnull align 8 dereferenceable(8) %.tr310397)
  store ptr %49, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  %50 = tail call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %48) #7
  store ptr %50, ptr %7, align 8
  %51 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEES7_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br i1 %51, label %.thread, label %56

.thread:                                          ; preds = %.split347
  %52 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #7
  %53 = getelementptr inbounds i8, ptr %52, i64 8
  %54 = load i8, ptr %53, align 8, !tbaa !11, !range !16, !noundef !17
  %55 = trunc nuw i8 %54 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  br label %.thread291

56:                                               ; preds = %.split347
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #7
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #7
  %57 = getelementptr inbounds i8, ptr %0, i64 120
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #7
  call void @"_ZNSt8functionIFb7ImplRefbEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(1) %11) #7
  %58 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve17find_impl__boundsERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull %8, ptr noundef nonnull align 8 dereferenceable(8) %.tr310397, ptr noundef nonnull %10)
          to label %59 unwind label %67

59:                                               ; preds = %56
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #7
  %60 = zext i1 %58 to i8
  store i8 %60, ptr %9, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %13, ptr noundef nonnull align 8 dereferenceable(8) %.tr310397)
          to label %61 unwind label %69

61:                                               ; preds = %59
  invoke void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.588") align 8 %12, ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %62 unwind label %71

62:                                               ; preds = %61
  %63 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %48, ptr noundef nonnull align 8 dereferenceable(9) %12)
          to label %64 unwind label %73

64:                                               ; preds = %62
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %12) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #7
  %65 = load i8, ptr %9, align 1, !tbaa !18, !range !16, !noundef !17
  %66 = trunc nuw i8 %65 to i1
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  br label %.thread291

67:                                               ; preds = %56
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #7
  br label %77

69:                                               ; preds = %59
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %76

71:                                               ; preds = %61
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %75

73:                                               ; preds = %62
  %74 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %12) #7
  br label %75

75:                                               ; preds = %73, %71
  %.pn267 = phi { ptr, i32 } [ %74, %73 ], [ %72, %71 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  br label %76

76:                                               ; preds = %75, %69
  %.pn267.pn = phi { ptr, i32 } [ %.pn267, %75 ], [ %70, %69 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #7
  br label %77

77:                                               ; preds = %76, %67
  %.pn267.pn.pn = phi { ptr, i32 } [ %.pn267.pn, %76 ], [ %68, %67 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  br label %191

.split350:                                        ; preds = %.preheader
  %78 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %79 = getelementptr inbounds i8, ptr %0, i64 280
  %80 = tail call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %79, ptr noundef nonnull align 8 dereferenceable(8) %.tr310397)
  store ptr %80, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %81 = tail call ptr @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %79) #7
  store ptr %81, ptr %15, align 8
  %82 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEES7_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  br i1 %82, label %.thread278, label %87

.thread278:                                       ; preds = %.split350
  %83 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3HIR7TypeRefEbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  %84 = getelementptr inbounds i8, ptr %83, i64 8
  %85 = load i8, ptr %84, align 8, !tbaa !11, !range !16, !noundef !17
  %86 = trunc nuw i8 %85 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br label %.thread291

87:                                               ; preds = %.split350
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  %88 = call noundef zeroext i1 @_ZNK3HIR13TypeData_Path10is_closureEv(ptr noundef nonnull align 8 dereferenceable(112) %78)
  br i1 %88, label %89, label %100

89:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #7
  store i8 1, ptr %16, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  call void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %18, ptr noundef nonnull align 8 dereferenceable(8) %.tr310397)
  invoke void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.588") align 8 %17, ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %90 unwind label %95

90:                                               ; preds = %89
  %91 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %79, ptr noundef nonnull align 8 dereferenceable(9) %17)
          to label %92 unwind label %97

92:                                               ; preds = %90
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %17) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #7
  %93 = load i8, ptr %16, align 1, !tbaa !18, !range !16, !noundef !17
  %94 = trunc nuw i8 %93 to i1
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  br label %.thread291

95:                                               ; preds = %89
  %96 = landingpad { ptr, i32 }
          cleanup
  br label %99

97:                                               ; preds = %90
  %98 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %17) #7
  br label %99

99:                                               ; preds = %97, %95
  %.pn264 = phi { ptr, i32 } [ %98, %97 ], [ %96, %95 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  br label %191

100:                                              ; preds = %87
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #7
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %19)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #7
  %101 = getelementptr inbounds i8, ptr %0, i64 120
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #7
  call void @"_ZNSt8functionIFb7ImplRefbEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %102 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve9find_implERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEEb(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef nonnull %19, ptr noundef nonnull align 8 dereferenceable(8) %.tr310397, ptr noundef nonnull %21, i1 noundef zeroext true)
          to label %103 unwind label %111

103:                                              ; preds = %100
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #7
  %104 = zext i1 %102 to i8
  store i8 %104, ptr %20, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #7
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %24, ptr noundef nonnull align 8 dereferenceable(8) %.tr310397)
          to label %105 unwind label %113

105:                                              ; preds = %103
  invoke void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.588") align 8 %23, ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %106 unwind label %115

106:                                              ; preds = %105
  %107 = invoke { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %79, ptr noundef nonnull align 8 dereferenceable(9) %23)
          to label %108 unwind label %117

108:                                              ; preds = %106
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %23) #7
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #7
  %109 = load i8, ptr %20, align 1, !tbaa !18, !range !16, !noundef !17
  %110 = trunc nuw i8 %109 to i1
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #7
  br label %.thread291

111:                                              ; preds = %100
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #7
  br label %121

113:                                              ; preds = %103
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %120

115:                                              ; preds = %105
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %119

117:                                              ; preds = %106
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3HIR7TypeRefEbED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %23) #7
  br label %119

119:                                              ; preds = %117, %115
  %.pn260 = phi { ptr, i32 } [ %118, %117 ], [ %116, %115 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  br label %120

120:                                              ; preds = %119, %113
  %.pn260.pn = phi { ptr, i32 } [ %.pn260, %119 ], [ %114, %113 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #7
  br label %121

121:                                              ; preds = %120, %111
  %.pn260.pn.pn = phi { ptr, i32 } [ %.pn260.pn, %120 ], [ %112, %111 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #7
  br label %191

.split354:                                        ; preds = %.preheader
  %122 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR8TypeData10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  br label %.thread291

.split357:                                        ; preds = %.preheader
  %123 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData10as_ClosureEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  %124 = load i32, ptr @gTargetVersion, align 4, !tbaa !5
  %125 = icmp sgt i32 %124, 0
  br i1 %125, label %126, label %.thread291

126:                                              ; preds = %.split357
  %127 = load ptr, ptr %123, align 8, !tbaa !19
  %128 = getelementptr inbounds i8, ptr %127, i64 80
  %129 = load i8, ptr %128, align 8, !tbaa !21, !range !16, !noundef !17
  %130 = trunc nuw i8 %129 to i1
  br label %.thread291

.split360:                                        ; preds = %.preheader
  %131 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData12as_GeneratorEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #7
  store ptr @__func__._ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE, ptr %25, align 8, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #7
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #7
  store ptr %25, ptr %28, align 8, !tbaa !59
  call void @"_ZNSt8functionIFvRSoEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull %27)
          to label %132 unwind label %135

132:                                              ; preds = %.split360
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #7
  %133 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %133, ptr noundef nonnull @.str.3)
          to label %134 unwind label %137

134:                                              ; preds = %132
  call void @__cxa_throw(ptr nonnull %133, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #8
  unreachable

135:                                              ; preds = %.split360
  %136 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #7
  br label %139

137:                                              ; preds = %132
  %138 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %133) #7
  br label %139

139:                                              ; preds = %137, %135
  %.pn = phi { ptr, i32 } [ %138, %137 ], [ %136, %135 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  br label %191

.split363:                                        ; preds = %.preheader
  %140 = tail call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  br label %.thread291

.split366:                                        ; preds = %.preheader
  %141 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  %142 = getelementptr inbounds i8, ptr %141, i64 4
  %143 = load i32, ptr %142, align 4, !tbaa !60
  %144 = icmp eq i32 %143, 0
  br label %.thread291

.split369:                                        ; preds = %.preheader
  %145 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3HIR8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  br label %.thread291

.split372:                                        ; preds = %.preheader
  %146 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData16as_NamedFunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  br label %.thread291

.split375:                                        ; preds = %.preheader
  %147 = tail call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3HIR8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  br label %.thread291

.split378:                                        ; preds = %.preheader
  %148 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  %149 = load i32, ptr %148, align 4, !tbaa !63
  %150 = icmp ne i32 %149, 16
  br label %.thread291

.split381:                                        ; preds = %.preheader
  %151 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  %152 = getelementptr inbounds i8, ptr %151, i64 8
  %153 = tail call noundef zeroext i1 @_ZNK3HIR9ArraySize8is_KnownEv(ptr noundef nonnull align 8 dereferenceable(32) %152)
  br i1 %153, label %154, label %tailrecurse

154:                                              ; preds = %.split381
  %155 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR9ArraySize8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(32) %152)
  %156 = load i64, ptr %155, align 8, !tbaa !65
  %157 = icmp eq i64 %156, 0
  br i1 %157, label %.thread291, label %tailrecurse

tailrecurse:                                      ; preds = %154, %.split381
  %158 = load i32, ptr @gTargetVersion, align 4, !tbaa !5
  %159 = icmp sgt i32 %158, 0
  br i1 %159, label %.preheader, label %tailrecurse._crit_edge

.split384:                                        ; preds = %.preheader
  %160 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  br label %.thread291

.split387:                                        ; preds = %.preheader
  %161 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  br label %.thread291

.split390:                                        ; preds = %.preheader
  %162 = tail call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  %163 = getelementptr inbounds i8, ptr %162, i64 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #7
  %164 = tail call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %163) #7
  store ptr %164, ptr %29, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #7
  %165 = tail call ptr @_ZNKSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %163) #7
  store ptr %165, ptr %30, align 8
  %166 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #7
  br i1 %166, label %.lr.ph399, label %._crit_edge400

.lr.ph399:                                        ; preds = %.split390
  %167 = getelementptr inbounds i8, ptr %0, i64 120
  br label %168

168:                                              ; preds = %.lr.ph399, %178
  %169 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %31) #7
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %31)
  %170 = getelementptr inbounds i8, ptr %169, i64 136
  %171 = load ptr, ptr %170, align 8, !tbaa !67
  %172 = getelementptr inbounds i8, ptr %169, i64 8
  %173 = getelementptr inbounds i8, ptr %169, i64 16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #7
  call void @"_ZNSt8functionIFbRKN3HIR10PathParamsESt3mapI8RcStringNS0_9TraitPath8AtyEqualESt4lessIS5_ESaISt4pairIKS5_S7_EEEEEC2IZNK18StaticTraitResolve13type_is_cloneERK4SpanRKNS0_7TypeRefEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 1 dereferenceable(1) %33) #7
  %174 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve25find_named_trait_in_traitERK4SpanRKN3HIR10SimplePathERKNS3_10PathParamsERKNS3_5TraitES6_S9_RKNS3_7TypeRefESt8functionIFbS9_St3mapI8RcStringNS3_9TraitPath8AtyEqualESt4lessISI_ESaISt4pairIKSI_SK_EEEEE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %167, ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(400) %171, ptr noundef nonnull align 8 dereferenceable(8) %172, ptr noundef nonnull align 8 dereferenceable(24) %173, ptr noundef nonnull align 8 dereferenceable(8) %.tr310397, ptr noundef nonnull %32)
          to label %175 unwind label %176

175:                                              ; preds = %168
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #7
  br i1 %174, label %select.unfold280, label %178

176:                                              ; preds = %168
  %177 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #7
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  br label %191

178:                                              ; preds = %175
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #7
  %180 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #7
  br i1 %180, label %168, label %._crit_edge400

._crit_edge400:                                   ; preds = %178, %.split390
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  br label %.thread291

.split394:                                        ; preds = %.preheader
  %181 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %38)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #7
  %182 = tail call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %181) #7
  store ptr %182, ptr %34, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #7
  %183 = tail call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %181) #7
  store ptr %183, ptr %35, align 8
  %184 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %35) #7
  br i1 %184, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.split394, %187
  %185 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #7
  %186 = call noundef zeroext i1 @_ZNK18StaticTraitResolve13type_is_cloneERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %185)
  br i1 %186, label %187, label %select.unfold

187:                                              ; preds = %.lr.ph
  %188 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #7
  %189 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %35) #7
  br i1 %189, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %187, %.split394
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #7
  br label %.thread291

select.unfold:                                    ; preds = %.lr.ph
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #7
  br label %.thread291

select.unfold280:                                 ; preds = %175
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  br label %.thread291

.thread285:                                       ; preds = %.preheader
  %190 = tail call ptr @__cxa_allocate_exception(i64 8) #7
  store ptr @.str.74, ptr %190, align 16, !tbaa !59
  tail call void @__cxa_throw(ptr nonnull %190, ptr nonnull @_ZTIPKc, ptr null) #8
  unreachable

.thread291:                                       ; preds = %154, %select.unfold280, %select.unfold, %._crit_edge, %._crit_edge400, %.split387, %.split384, %.split378, %.split375, %.split372, %.split369, %.split366, %.split363, %.split354, %64, %92, %108, %126, %.split357, %.thread, %.thread278
  %.56.ph296 = phi i1 [ true, %._crit_edge ], [ false, %._crit_edge400 ], [ false, %.split387 ], [ false, %.split384 ], [ %150, %.split378 ], [ true, %.split375 ], [ true, %.split372 ], [ true, %.split369 ], [ %144, %.split366 ], [ false, %.split363 ], [ true, %.split354 ], [ %66, %64 ], [ %94, %92 ], [ %110, %108 ], [ %130, %126 ], [ false, %.split357 ], [ %55, %.thread ], [ %86, %.thread278 ], [ true, %select.unfold280 ], [ false, %select.unfold ], [ true, %154 ]
  ret i1 %.56.ph296

191:                                              ; preds = %77, %139, %176, %121, %99, %45, %43
  %.pn271.pn = phi { ptr, i32 } [ %46, %45 ], [ %44, %43 ], [ %177, %176 ], [ %.pn, %139 ], [ %.pn267.pn.pn, %77 ], [ %.pn264, %99 ], [ %.pn260.pn.pn, %121 ]
  resume { ptr, i32 } %.pn271.pn
}

declare void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve25find_named_trait_in_traitERK4SpanRKN3HIR10SimplePathERKNS3_10PathParamsERKNS3_5TraitES6_S9_RKNS3_7TypeRefESt8functionIFbS9_St3mapI8RcStringNS3_9TraitPath8AtyEqualESt4lessISI_ESaISt4pairIKSI_SK_EEEEE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(400), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0 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 #4 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK18StaticTraitResolve17find_impl__boundsERK4SpanRKN3HIR10SimplePathEPKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefbEE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0 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 #4 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIN3HIR7TypeRefEbSt4lessIS1_ESaISt4pairIKS1_bEEE6insertIS4_IS1_bEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(9)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3HIR7TypeRefERbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.588") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"_ZTS13TargetVersion", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !15, i64 8}
!12 = !{!"_ZTSSt4pairIKN3HIR7TypeRefEbE", !13, i64 0, !15, i64 8}
!13 = !{!"_ZTSN3HIR7TypeRefE", !14, i64 0}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{!15, !15, i64 0}
!19 = !{!20, !14, i64 0}
!20 = !{!"_ZTSN3HIR8TypeData12Data_ClosureE", !14, i64 0}
!21 = !{!22, !15, i64 80}
!22 = !{!"_ZTSN3HIR16ExprNode_ClosureE", !23, i64 0, !26, i64 32, !13, i64 56, !30, i64 64, !15, i64 72, !36, i64 76, !15, i64 80, !37, i64 88, !46, i64 136, !14, i64 144, !48, i64 152, !48, i64 184, !55, i64 216}
!23 = !{!"_ZTSN3HIR8ExprNodeE", !24, i64 8, !13, i64 16, !25, i64 24}
!24 = !{!"_ZTS4Span", !14, i64 0}
!25 = !{!"_ZTSN3HIR10ValueUsageE", !7, i64 0}
!26 = !{!"_ZTSSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!30 = !{!"_ZTSSt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS1_EE", !31, i64 0}
!31 = !{!"_ZTSSt15__uniq_ptr_dataIN3HIR8ExprNodeESt14default_deleteIS1_ELb1ELb1EE", !32, i64 0}
!32 = !{!"_ZTSSt15__uniq_ptr_implIN3HIR8ExprNodeESt14default_deleteIS1_EE", !33, i64 0}
!33 = !{!"_ZTSSt5tupleIJPN3HIR8ExprNodeESt14default_deleteIS1_EEE", !34, i64 0}
!34 = !{!"_ZTSSt11_Tuple_implILm0EJPN3HIR8ExprNodeESt14default_deleteIS1_EEE", !35, i64 0}
!35 = !{!"_ZTSSt10_Head_baseILm0EPN3HIR8ExprNodeELb0EE", !14, i64 0}
!36 = !{!"_ZTSN3HIR16ExprNode_Closure5ClassE", !7, i64 0}
!37 = !{!"_ZTSN3HIR16ExprNode_Closure8AvuCacheE", !38, i64 0, !42, i64 24}
!38 = !{!"_ZTSSt6vectorIjSaIjEE", !39, i64 0}
!39 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!42 = !{!"_ZTSSt6vectorIN3HIR16ExprNode_Closure8AvuCache7CaptureESaIS3_EE", !43, i64 0}
!43 = !{!"_ZTSSt12_Vector_baseIN3HIR16ExprNode_Closure8AvuCache7CaptureESaIS3_EE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIN3HIR16ExprNode_Closure8AvuCache7CaptureESaIS3_EE12_Vector_implE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIN3HIR16ExprNode_Closure8AvuCache7CaptureESaIS3_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!46 = !{!"_ZTSN3HIR11LifetimeRefE", !47, i64 0}
!47 = !{!"int", !7, i64 0}
!48 = !{!"_ZTSN3HIR11GenericPathE", !49, i64 0, !51, i64 8}
!49 = !{!"_ZTSN3HIR10SimplePathE", !50, i64 0}
!50 = !{!"_ZTS10ThinVectorI8RcStringE", !14, i64 0}
!51 = !{!"_ZTSN3HIR10PathParamsE", !52, i64 0, !53, i64 8, !54, i64 16}
!52 = !{!"_ZTS10ThinVectorIN3HIR11LifetimeRefEE", !14, i64 0}
!53 = !{!"_ZTS10ThinVectorIN3HIR7TypeRefEE", !14, i64 0}
!54 = !{!"_ZTS10ThinVectorIN3HIR12ConstGenericEE", !14, i64 0}
!55 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS2_EESaIS5_EE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS2_EESaIS5_EE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!59 = !{!14, !14, i64 0}
!60 = !{!61, !62, i64 4}
!61 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !46, i64 0, !62, i64 4, !13, i64 8}
!62 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!63 = !{!64, !64, i64 0}
!64 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!65 = !{!66, !66, i64 0}
!66 = !{!"long", !7, i64 0}
!67 = !{!68, !14, i64 136}
!68 = !{!"_ZTSN3HIR9TraitPathE", !69, i64 0, !48, i64 8, !75, i64 40, !83, i64 88, !14, i64 136}
!69 = !{!"_ZTSSt10unique_ptrIN3HIR13GenericParamsESt14default_deleteIS1_EE", !70, i64 0}
!70 = !{!"_ZTSSt15__uniq_ptr_dataIN3HIR13GenericParamsESt14default_deleteIS1_ELb1ELb1EE", !71, i64 0}
!71 = !{!"_ZTSSt15__uniq_ptr_implIN3HIR13GenericParamsESt14default_deleteIS1_EE", !72, i64 0}
!72 = !{!"_ZTSSt5tupleIJPN3HIR13GenericParamsESt14default_deleteIS1_EEE", !73, i64 0}
!73 = !{!"_ZTSSt11_Tuple_implILm0EJPN3HIR13GenericParamsESt14default_deleteIS1_EEE", !74, i64 0}
!74 = !{!"_ZTSSt10_Head_baseILm0EPN3HIR13GenericParamsELb0EE", !14, i64 0}
!75 = !{!"_ZTSSt3mapI8RcStringN3HIR9TraitPath8AtyEqualESt4lessIS0_ESaISt4pairIKS0_S3_EEE", !76, i64 0}
!76 = !{!"_ZTSSt8_Rb_treeI8RcStringSt4pairIKS0_N3HIR9TraitPath8AtyEqualEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE", !77, i64 0}
!77 = !{!"_ZTSNSt8_Rb_treeI8RcStringSt4pairIKS0_N3HIR9TraitPath8AtyEqualEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !78, i64 0, !80, i64 8}
!78 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessI8RcStringEE", !79, i64 0}
!79 = !{!"_ZTSSt4lessI8RcStringE"}
!80 = !{!"_ZTSSt15_Rb_tree_header", !81, i64 0, !66, i64 32}
!81 = !{!"_ZTSSt18_Rb_tree_node_base", !82, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!82 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!83 = !{!"_ZTSSt3mapI8RcStringN3HIR9TraitPath8AtyBoundESt4lessIS0_ESaISt4pairIKS0_S3_EEE", !84, i64 0}
!84 = !{!"_ZTSSt8_Rb_treeI8RcStringSt4pairIKS0_N3HIR9TraitPath8AtyBoundEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE", !85, i64 0}
!85 = !{!"_ZTSNSt8_Rb_treeI8RcStringSt4pairIKS0_N3HIR9TraitPath8AtyBoundEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !78, i64 0, !80, i64 8}


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