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

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

%"struct.HIR::PathParams" = type { %class.ThinVector.26, %class.ThinVector.27, %class.ThinVector.28 }
%class.ThinVector.26 = type { ptr }
%class.ThinVector.27 = type { ptr }
%class.ThinVector.28 = type { ptr }
%"class.std::function.444" = 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.621 = type { ptr }
%struct.TraitResolveCommon = type { ptr, ptr, ptr, %"class.std::map.205", %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.205" = type { %"class.std::_Rb_tree.206" }
%"class.std::_Rb_tree.206" = 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.211", [8 x i8] }>
%"class.std::vector.211" = type { %"struct.std::_Vector_base.212" }
%"struct.std::_Vector_base.212" = 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 }
%"struct.HIR::TypeData::Data_Infer" = type { i32, i32 }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.29" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.29" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%class.RcString = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.std::unique_ptr.29" = type { %"struct.std::__uniq_ptr_data.30" }
%"struct.std::__uniq_ptr_data.30" = type { %"class.std::__uniq_ptr_impl.31" }
%"class.std::__uniq_ptr_impl.31" = type { %"class.std::tuple.32" }
%"class.std::tuple.32" = type { %"struct.std::_Tuple_impl.33" }
%"struct.std::_Tuple_impl.33" = type { %"struct.std::_Head_base.36" }
%"struct.std::_Head_base.36" = type { ptr }
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"class.HIR::GenericParams" = type { %"class.std::vector.65", %"class.std::vector.70", %"class.std::vector.75", %"class.std::vector.80" }
%"class.std::vector.65" = type { %"struct.std::_Vector_base.66" }
%"struct.std::_Vector_base.66" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.70" = type { %"struct.std::_Vector_base.71" }
%"struct.std::_Vector_base.71" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.75" = type { %"struct.std::_Vector_base.76" }
%"struct.std::_Vector_base.76" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.80" = type { %"struct.std::_Vector_base.81" }
%"struct.std::_Vector_base.81" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.474" }
%"class.std::vector.474" = type { %"struct.std::_Vector_base.475" }
%"struct.std::_Vector_base.475" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TraitMarkings" = type { i8, i8, i8, %"class.std::map.469" }
%"class.std::map.469" = type { %"class.std::_Rb_tree.470" }
%"class.std::_Rb_tree.470" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%"struct.HIR::TypeParamDef" = type <{ %class.RcString, %"class.HIR::TypeRef", i8, [7 x i8] }>
%"struct.HIR::TypeData_ErasedType" = type { i8, %"class.std::vector.50", %"class.std::vector.55", %"class.HIR::TypeData_ErasedType_Inner" }
%"class.std::vector.50" = type { %"struct.std::_Vector_base.51" }
%"struct.std::_Vector_base.51" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.55" = type { %"struct.std::_Vector_base.56" }
%"struct.std::_Vector_base.56" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeRef, std::allocator<HIR::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeData_ErasedType_Inner" = type { i32, %"union.HIR::TypeData_ErasedType_Inner::DataUnion" }
%"union.HIR::TypeData_ErasedType_Inner::DataUnion" = type { %"struct.HIR::TypeData_ErasedType_Inner::Data_Alias", [56 x i8] }
%"struct.HIR::TypeData_ErasedType_Inner::Data_Alias" = type { %"struct.HIR::PathParams", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }

@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE = external hidden unnamed_addr constant [90 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) #5 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca %"struct.HIR::PathParams", align 8
  %11 = alloca %"class.std::function.444", align 8
  %12 = alloca %class.anon.621, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca i8, align 1
  %19 = alloca ptr, align 8
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca i8, align 1
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i8, align 1
  %33 = alloca ptr, align 8
  %34 = alloca i8, align 1
  %35 = alloca ptr, align 8
  %36 = alloca i8, align 1
  %37 = 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
  %38 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #6
  store i8 0, ptr %8, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #6
  %39 = load ptr, ptr %6, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.TraitResolveCommon, ptr %38, i32 0, i32 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #6
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10)
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %42 = getelementptr inbounds %class.anon.621, ptr %12, i32 0, i32 0
  store ptr %8, ptr %42, align 8, !tbaa !5
  call void @"_ZNSt8functionIFb7ImplRefN3HIR7CompareEEEC2IZNK15TraitResolution13type_is_sizedERK4SpanRKNS1_7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #6
  %43 = invoke noundef zeroext i1 @_ZNK15TraitResolution16find_trait_implsERK4SpanRKN3HIR10SimplePathERKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefNS3_7CompareEEEb(ptr noundef nonnull align 8 dereferenceable(280) %38, ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef %11, i1 noundef zeroext false)
          to label %44 unwind label %49

44:                                               ; preds = %3
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #6
  %45 = zext i1 %43 to i8
  store i8 %45, ptr %9, align 1, !tbaa !9
  %46 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %47 = trunc i8 %46 to i1
  br i1 %47, label %48, label %53

48:                                               ; preds = %44
  store i32 0, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %345

49:                                               ; preds = %3
  %50 = landingpad { ptr, i32 }
          cleanup
  %51 = extractvalue { ptr, i32 } %50, 0
  store ptr %51, ptr %13, align 8
  %52 = extractvalue { ptr, i32 } %50, 1
  store i32 %52, ptr %14, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #6
  br label %347

53:                                               ; preds = %44
  %54 = load i8, ptr %8, align 1, !tbaa !9, !range !11, !noundef !12
  %55 = trunc i8 %54 to i1
  br i1 %55, label %56, label %57

56:                                               ; preds = %53
  store i32 1, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %345

57:                                               ; preds = %53
  br label %58

58:                                               ; preds = %57
  br label %59

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

60:                                               ; preds = %341, %59
  %61 = load i8, ptr %16, align 1, !tbaa !9, !range !11, !noundef !12
  %62 = trunc i8 %61 to i1
  br i1 %62, label %64, label %63

63:                                               ; preds = %60
  store i32 2, ptr %15, align 4
  br label %342

64:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %65 = load ptr, ptr %7, align 8, !tbaa !5
  %66 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %65)
  store ptr %66, ptr %17, align 8, !tbaa !5
  br label %67

67:                                               ; preds = %337, %64
  %68 = load i8, ptr %16, align 1, !tbaa !9, !range !11, !noundef !12
  %69 = trunc i8 %68 to i1
  br i1 %69, label %71, label %70

70:                                               ; preds = %67
  store i32 5, ptr %15, align 4
  br label %338

71:                                               ; preds = %67
  %72 = load ptr, ptr %17, align 8, !tbaa !5
  %73 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %72)
  switch i32 %73, label %75 [
    i32 0, label %74
    i32 1, label %76
    i32 3, label %103
    i32 9, label %130
    i32 4, label %152
    i32 5, label %235
    i32 7, label %286
    i32 6, label %314
  ]

74:                                               ; preds = %71
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 3931, ptr noundef @__PRETTY_FUNCTION__._ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE) #7
  unreachable

75:                                               ; preds = %71
  br label %336

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

77:                                               ; preds = %99, %76
  %78 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %79 = trunc i8 %78 to i1
  br i1 %79, label %81, label %80

80:                                               ; preds = %77
  store i32 9, ptr %15, align 4
  br label %100

81:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %82 = load ptr, ptr %17, align 8, !tbaa !5
  %83 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %82)
  store ptr %83, ptr %19, align 8, !tbaa !5
  br label %84

84:                                               ; preds = %95, %81
  %85 = load ptr, ptr %19, align 8, !tbaa !5
  %86 = load i8, ptr %18, align 1, !tbaa !9, !range !11, !noundef !12
  %87 = trunc i8 %86 to i1
  br i1 %87, label %89, label %88

88:                                               ; preds = %84
  store i32 12, ptr %15, align 4
  br label %96

89:                                               ; preds = %84
  %90 = load ptr, ptr %19, align 8, !tbaa !5
  %91 = getelementptr inbounds %"struct.HIR::TypeData::Data_Infer", ptr %90, i32 0, i32 1
  %92 = load i32, ptr %91, align 4, !tbaa !13
  switch i32 %92, label %94 [
    i32 1, label %93
    i32 2, label %93
  ]

93:                                               ; preds = %89, %89
  store i32 0, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %96

94:                                               ; preds = %89
  store i32 1, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %96

95:                                               ; No predecessors!
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %84, !llvm.loop !17

96:                                               ; preds = %94, %93, %88
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  %97 = load i32, ptr %15, align 4
  switch i32 %97, label %100 [
    i32 12, label %98
  ]

98:                                               ; preds = %96
  br label %99

99:                                               ; preds = %98
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %77, !llvm.loop !19

100:                                              ; preds = %96, %80
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #6
  %101 = load i32, ptr %15, align 4
  switch i32 %101, label %338 [
    i32 9, label %102
  ]

102:                                              ; preds = %100
  br label %336

103:                                              ; preds = %71
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #6
  store i8 1, ptr %20, align 1, !tbaa !9
  br label %104

104:                                              ; preds = %126, %103
  %105 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %106 = trunc i8 %105 to i1
  br i1 %106, label %108, label %107

107:                                              ; preds = %104
  store i32 16, ptr %15, align 4
  br label %127

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

111:                                              ; preds = %122, %108
  %112 = load ptr, ptr %21, align 8, !tbaa !5
  %113 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %114 = trunc i8 %113 to i1
  br i1 %114, label %116, label %115

115:                                              ; preds = %111
  store i32 19, ptr %15, align 4
  br label %123

116:                                              ; preds = %111
  %117 = load ptr, ptr %21, align 8, !tbaa !5
  %118 = load i32, ptr %117, align 4, !tbaa !20
  %119 = icmp eq i32 %118, 16
  br i1 %119, label %120, label %121

120:                                              ; preds = %116
  store i32 2, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %123

121:                                              ; preds = %116
  br label %122

122:                                              ; preds = %121
  store i8 0, ptr %20, align 1, !tbaa !9
  br label %111, !llvm.loop !22

123:                                              ; preds = %120, %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  %124 = load i32, ptr %15, align 4
  switch i32 %124, label %127 [
    i32 19, label %125
  ]

125:                                              ; preds = %123
  br label %126

126:                                              ; preds = %125
  store i8 0, ptr %20, align 1, !tbaa !9
  br label %104, !llvm.loop !23

127:                                              ; preds = %123, %107
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #6
  %128 = load i32, ptr %15, align 4
  switch i32 %128, label %338 [
    i32 16, label %129
  ]

129:                                              ; preds = %127
  br label %336

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

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

134:                                              ; preds = %131
  store i32 22, ptr %15, align 4
  br label %149

135:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %136 = load ptr, ptr %17, align 8, !tbaa !5
  %137 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %136)
  store ptr %137, ptr %23, align 8, !tbaa !5
  br label %138

138:                                              ; preds = %144, %135
  %139 = load ptr, ptr %23, align 8, !tbaa !5
  %140 = load i8, ptr %22, align 1, !tbaa !9, !range !11, !noundef !12
  %141 = trunc i8 %140 to i1
  br i1 %141, label %143, label %142

142:                                              ; preds = %138
  store i32 25, ptr %15, align 4
  br label %145

143:                                              ; preds = %138
  store i32 2, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %145

144:                                              ; No predecessors!
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %138, !llvm.loop !24

145:                                              ; preds = %143, %142
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  %146 = load i32, ptr %15, align 4
  switch i32 %146, label %149 [
    i32 25, label %147
  ]

147:                                              ; preds = %145
  br label %148

148:                                              ; preds = %147
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %131, !llvm.loop !25

149:                                              ; preds = %145, %134
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  %150 = load i32, ptr %15, align 4
  switch i32 %150, label %338 [
    i32 22, label %151
  ]

151:                                              ; preds = %149
  br label %336

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

153:                                              ; preds = %231, %152
  %154 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %155 = trunc i8 %154 to i1
  br i1 %155, label %157, label %156

156:                                              ; preds = %153
  store i32 28, ptr %15, align 4
  br label %232

157:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %158 = load ptr, ptr %17, align 8, !tbaa !5
  %159 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %158)
  store ptr %159, ptr %25, align 8, !tbaa !5
  br label %160

160:                                              ; preds = %227, %157
  %161 = load ptr, ptr %25, align 8, !tbaa !5
  %162 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %163 = trunc i8 %162 to i1
  br i1 %163, label %165, label %164

164:                                              ; preds = %160
  store i32 31, ptr %15, align 4
  br label %228

165:                                              ; preds = %160
  %166 = load ptr, ptr %25, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %166, i32 0, i32 1
  %168 = call noundef i32 @_ZNK3HIR15TypePathBinding3tagEv(ptr noundef nonnull align 8 dereferenceable(16) %167)
  switch i32 %168, label %226 [
    i32 0, label %169
    i32 1, label %170
    i32 2, label %175
    i32 3, label %180
    i32 6, label %185
    i32 5, label %190
    i32 4, label %195
  ]

169:                                              ; preds = %165
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.7, i32 noundef 3984, ptr noundef @__PRETTY_FUNCTION__._ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE) #7
  unreachable

170:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %171 = load ptr, ptr %25, align 8, !tbaa !5
  %172 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %171, i32 0, i32 1
  %173 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding10as_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %172)
  store ptr %173, ptr %26, align 8, !tbaa !5
  %174 = load ptr, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %226

175:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %176 = load ptr, ptr %25, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %176, i32 0, i32 1
  %178 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding9as_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16) %177)
  store ptr %178, ptr %27, align 8, !tbaa !5
  %179 = load ptr, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  br label %226

180:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %181 = load ptr, ptr %25, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %181, i32 0, i32 1
  %183 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding13as_ExternTypeEv(ptr noundef nonnull align 8 dereferenceable(16) %182)
  store ptr %183, ptr %28, align 8, !tbaa !5
  %184 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 2, ptr %4, align 4
  store i32 1, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %228

185:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %186 = load ptr, ptr %25, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %186, i32 0, i32 1
  %188 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %187)
  store ptr %188, ptr %29, align 8, !tbaa !5
  %189 = load ptr, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %226

190:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %191 = load ptr, ptr %25, align 8, !tbaa !5
  %192 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %191, i32 0, i32 1
  %193 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding8as_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %192)
  store ptr %193, ptr %30, align 8, !tbaa !5
  %194 = load ptr, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %226

195:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %196 = load ptr, ptr %25, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %196, i32 0, i32 1
  %198 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %197)
  store ptr %198, ptr %31, align 8, !tbaa !5
  %199 = load ptr, ptr %31, align 8, !tbaa !5
  %200 = load ptr, ptr %31, align 8, !tbaa !5
  %201 = load ptr, ptr %200, align 8, !tbaa !5
  %202 = getelementptr inbounds %"class.HIR::Struct", ptr %201, i32 0, i32 7
  %203 = getelementptr inbounds %"struct.HIR::StructMarkings", ptr %202, i32 0, i32 2
  %204 = load i32, ptr %203, align 8, !tbaa !26
  switch i32 %204, label %222 [
    i32 0, label %222
    i32 1, label %205
    i32 2, label %221
    i32 3, label %221
  ]

205:                                              ; preds = %195
  %206 = load ptr, ptr %6, align 8, !tbaa !5
  %207 = load ptr, ptr %25, align 8, !tbaa !5
  %208 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %207, i32 0, i32 0
  %209 = getelementptr inbounds %"class.HIR::Path", ptr %208, i32 0, i32 0
  %210 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %209)
  %211 = getelementptr inbounds %"class.HIR::GenericPath", ptr %210, i32 0, i32 1
  %212 = getelementptr inbounds %"struct.HIR::PathParams", ptr %211, i32 0, i32 1
  %213 = load ptr, ptr %31, align 8, !tbaa !5
  %214 = load ptr, ptr %213, align 8, !tbaa !5
  %215 = getelementptr inbounds %"class.HIR::Struct", ptr %214, i32 0, i32 7
  %216 = getelementptr inbounds %"struct.HIR::StructMarkings", ptr %215, i32 0, i32 1
  %217 = load i32, ptr %216, align 4, !tbaa !63
  %218 = zext i32 %217 to i64
  %219 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %212, i64 noundef %218)
  %220 = call noundef i32 @_ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %38, ptr noundef nonnull align 8 dereferenceable(8) %206, ptr noundef nonnull align 8 dereferenceable(8) %219)
  store i32 %220, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %223

221:                                              ; preds = %195, %195
  store i32 2, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %223

222:                                              ; preds = %195, %195
  store i32 0, ptr %15, align 4
  br label %223

223:                                              ; preds = %222, %221, %205
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  %224 = load i32, ptr %15, align 4
  switch i32 %224, label %228 [
    i32 0, label %225
  ]

225:                                              ; preds = %223
  br label %226

226:                                              ; preds = %225, %190, %185, %175, %170, %165
  br label %227

227:                                              ; preds = %226
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %160, !llvm.loop !64

228:                                              ; preds = %223, %180, %164
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  %229 = load i32, ptr %15, align 4
  switch i32 %229, label %232 [
    i32 31, label %230
  ]

230:                                              ; preds = %228
  br label %231

231:                                              ; preds = %230
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %153, !llvm.loop !65

232:                                              ; preds = %228, %156
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  %233 = load i32, ptr %15, align 4
  switch i32 %233, label %338 [
    i32 28, label %234
  ]

234:                                              ; preds = %232
  br label %336

235:                                              ; preds = %71
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #6
  store i8 1, ptr %32, align 1, !tbaa !9
  br label %236

236:                                              ; preds = %282, %235
  %237 = load i8, ptr %32, align 1, !tbaa !9, !range !11, !noundef !12
  %238 = trunc i8 %237 to i1
  br i1 %238, label %240, label %239

239:                                              ; preds = %236
  store i32 36, ptr %15, align 4
  br label %283

240:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %241 = load ptr, ptr %17, align 8, !tbaa !5
  %242 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %241)
  store ptr %242, ptr %33, align 8, !tbaa !5
  br label %243

243:                                              ; preds = %278, %240
  %244 = load ptr, ptr %33, align 8, !tbaa !5
  %245 = load i8, ptr %32, align 1, !tbaa !9, !range !11, !noundef !12
  %246 = trunc i8 %245 to i1
  br i1 %246, label %248, label %247

247:                                              ; preds = %243
  store i32 39, ptr %15, align 4
  br label %279

248:                                              ; preds = %243
  %249 = load ptr, ptr %33, align 8, !tbaa !5
  %250 = call noundef i32 @_ZNK3HIR10GenericRef5groupEv(ptr noundef nonnull align 8 dereferenceable(12) %249)
  switch i32 %250, label %277 [
    i32 0, label %251
    i32 1, label %264
  ]

251:                                              ; preds = %248
  %252 = getelementptr inbounds %struct.TraitResolveCommon, ptr %38, i32 0, i32 1
  %253 = load ptr, ptr %252, align 8, !tbaa !66
  %254 = getelementptr inbounds %"class.HIR::GenericParams", ptr %253, i32 0, i32 0
  %255 = load ptr, ptr %33, align 8, !tbaa !5
  %256 = call noundef i32 @_ZNK3HIR10GenericRef3idxEv(ptr noundef nonnull align 8 dereferenceable(12) %255)
  %257 = zext i32 %256 to i64
  %258 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNKSt6vectorIN3HIR12TypeParamDefESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %254, i64 noundef %257)
  %259 = getelementptr inbounds %"struct.HIR::TypeParamDef", ptr %258, i32 0, i32 2
  %260 = load i8, ptr %259, align 8, !tbaa !81, !range !11, !noundef !12
  %261 = trunc i8 %260 to i1
  %262 = zext i1 %261 to i64
  %263 = select i1 %261, i32 0, i32 2
  store i32 %263, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %279

264:                                              ; preds = %248
  %265 = getelementptr inbounds %struct.TraitResolveCommon, ptr %38, i32 0, i32 2
  %266 = load ptr, ptr %265, align 8, !tbaa !85
  %267 = getelementptr inbounds %"class.HIR::GenericParams", ptr %266, i32 0, i32 0
  %268 = load ptr, ptr %33, align 8, !tbaa !5
  %269 = call noundef i32 @_ZNK3HIR10GenericRef3idxEv(ptr noundef nonnull align 8 dereferenceable(12) %268)
  %270 = zext i32 %269 to i64
  %271 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNKSt6vectorIN3HIR12TypeParamDefESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %267, i64 noundef %270)
  %272 = getelementptr inbounds %"struct.HIR::TypeParamDef", ptr %271, i32 0, i32 2
  %273 = load i8, ptr %272, align 8, !tbaa !81, !range !11, !noundef !12
  %274 = trunc i8 %273 to i1
  %275 = zext i1 %274 to i64
  %276 = select i1 %274, i32 0, i32 2
  store i32 %276, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %279

277:                                              ; preds = %248
  store i32 0, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %279

278:                                              ; No predecessors!
  store i8 0, ptr %32, align 1, !tbaa !9
  br label %243, !llvm.loop !86

279:                                              ; preds = %277, %264, %251, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  %280 = load i32, ptr %15, align 4
  switch i32 %280, label %283 [
    i32 39, label %281
  ]

281:                                              ; preds = %279
  br label %282

282:                                              ; preds = %281
  store i8 0, ptr %32, align 1, !tbaa !9
  br label %236, !llvm.loop !87

283:                                              ; preds = %279, %239
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #6
  %284 = load i32, ptr %15, align 4
  switch i32 %284, label %338 [
    i32 36, label %285
  ]

285:                                              ; preds = %283
  br label %336

286:                                              ; preds = %71
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #6
  store i8 1, ptr %34, align 1, !tbaa !9
  br label %287

287:                                              ; preds = %310, %286
  %288 = load i8, ptr %34, align 1, !tbaa !9, !range !11, !noundef !12
  %289 = trunc i8 %288 to i1
  br i1 %289, label %291, label %290

290:                                              ; preds = %287
  store i32 43, ptr %15, align 4
  br label %311

291:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %292 = load ptr, ptr %17, align 8, !tbaa !5
  %293 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %292)
  store ptr %293, ptr %35, align 8, !tbaa !5
  br label %294

294:                                              ; preds = %306, %291
  %295 = load ptr, ptr %35, align 8, !tbaa !5
  %296 = load i8, ptr %34, align 1, !tbaa !9, !range !11, !noundef !12
  %297 = trunc i8 %296 to i1
  br i1 %297, label %299, label %298

298:                                              ; preds = %294
  store i32 46, ptr %15, align 4
  br label %307

299:                                              ; preds = %294
  %300 = load ptr, ptr %35, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.HIR::TypeData_ErasedType", ptr %300, i32 0, i32 0
  %302 = load i8, ptr %301, align 8, !tbaa !88, !range !11, !noundef !12
  %303 = trunc i8 %302 to i1
  %304 = zext i1 %303 to i64
  %305 = select i1 %303, i32 0, i32 2
  store i32 %305, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %307

306:                                              ; No predecessors!
  store i8 0, ptr %34, align 1, !tbaa !9
  br label %294, !llvm.loop !100

307:                                              ; preds = %299, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  %308 = load i32, ptr %15, align 4
  switch i32 %308, label %311 [
    i32 46, label %309
  ]

309:                                              ; preds = %307
  br label %310

310:                                              ; preds = %309
  store i8 0, ptr %34, align 1, !tbaa !9
  br label %287, !llvm.loop !101

311:                                              ; preds = %307, %290
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #6
  %312 = load i32, ptr %15, align 4
  switch i32 %312, label %338 [
    i32 43, label %313
  ]

313:                                              ; preds = %311
  br label %336

314:                                              ; preds = %71
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #6
  store i8 1, ptr %36, align 1, !tbaa !9
  br label %315

315:                                              ; preds = %332, %314
  %316 = load i8, ptr %36, align 1, !tbaa !9, !range !11, !noundef !12
  %317 = trunc i8 %316 to i1
  br i1 %317, label %319, label %318

318:                                              ; preds = %315
  store i32 49, ptr %15, align 4
  br label %333

319:                                              ; preds = %315
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %320 = load ptr, ptr %17, align 8, !tbaa !5
  %321 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %320)
  store ptr %321, ptr %37, align 8, !tbaa !5
  br label %322

322:                                              ; preds = %328, %319
  %323 = load ptr, ptr %37, align 8, !tbaa !5
  %324 = load i8, ptr %36, align 1, !tbaa !9, !range !11, !noundef !12
  %325 = trunc i8 %324 to i1
  br i1 %325, label %327, label %326

326:                                              ; preds = %322
  store i32 52, ptr %15, align 4
  br label %329

327:                                              ; preds = %322
  store i32 2, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %329

328:                                              ; No predecessors!
  store i8 0, ptr %36, align 1, !tbaa !9
  br label %322, !llvm.loop !102

329:                                              ; preds = %327, %326
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  %330 = load i32, ptr %15, align 4
  switch i32 %330, label %333 [
    i32 52, label %331
  ]

331:                                              ; preds = %329
  br label %332

332:                                              ; preds = %331
  store i8 0, ptr %36, align 1, !tbaa !9
  br label %315, !llvm.loop !103

333:                                              ; preds = %329, %318
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #6
  %334 = load i32, ptr %15, align 4
  switch i32 %334, label %338 [
    i32 49, label %335
  ]

335:                                              ; preds = %333
  br label %336

336:                                              ; preds = %335, %313, %285, %234, %151, %129, %102, %75
  br label %337

337:                                              ; preds = %336
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %67, !llvm.loop !104

338:                                              ; preds = %333, %311, %283, %232, %149, %127, %100, %70
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  %339 = load i32, ptr %15, align 4
  switch i32 %339, label %342 [
    i32 5, label %340
  ]

340:                                              ; preds = %338
  br label %341

341:                                              ; preds = %340
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %60, !llvm.loop !105

342:                                              ; preds = %338, %63
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #6
  %343 = load i32, ptr %15, align 4
  switch i32 %343, label %345 [
    i32 2, label %344
  ]

344:                                              ; preds = %342
  store i32 0, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %345

345:                                              ; preds = %344, %342, %56, %48
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #6
  %346 = load i32, ptr %4, align 4
  ret i32 %346

347:                                              ; preds = %49
  %348 = load ptr, ptr %13, align 8
  %349 = load i32, ptr %14, align 4
  %350 = insertvalue { ptr, i32 } poison, ptr %348, 0
  %351 = insertvalue { ptr, i32 } %350, i32 %349, 1
  resume { ptr, i32 } %351
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !16, i64 4}
!14 = !{!"_ZTSN3HIR8TypeData10Data_InferE", !15, i64 0, !16, i64 4}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSN3HIR10InferClassE", !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = !{!21, !21, i64 0}
!21 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = !{!27, !59, i64 208}
!27 = !{!"_ZTSN3HIR6StructE", !28, i64 0, !45, i64 96, !46, i64 104, !15, i64 136, !15, i64 140, !48, i64 144, !58, i64 200, !62, i64 248}
!28 = !{!"_ZTSN3HIR13GenericParamsE", !29, i64 0, !33, i64 24, !37, i64 48, !41, i64 72}
!29 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !34, i64 0}
!34 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!37 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!41 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !42, i64 0}
!42 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!45 = !{!"_ZTSN3HIR6Struct4ReprE", !7, i64 0}
!46 = !{!"_ZTSN3HIR6Struct4DataE", !47, i64 0, !7, i64 8}
!47 = !{!"_ZTSN3HIR6Struct4Data3TagE", !7, i64 0}
!48 = !{!"_ZTSN3HIR13TraitMarkingsE", !10, i64 0, !10, i64 1, !10, i64 2, !49, i64 8}
!49 = !{!"_ZTSSt3mapIN3HIR10SimplePathENS0_13TraitMarkings11AutoMarkingESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !50, i64 0}
!50 = !{!"_ZTSSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !51, i64 0}
!51 = !{!"_ZTSNSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !52, i64 0, !54, i64 8}
!52 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR10SimplePathEEE", !53, i64 0}
!53 = !{!"_ZTSSt4lessIN3HIR10SimplePathEE"}
!54 = !{!"_ZTSSt15_Rb_tree_header", !55, i64 0, !57, i64 32}
!55 = !{!"_ZTSSt18_Rb_tree_node_base", !56, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!56 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!57 = !{!"long", !7, i64 0}
!58 = !{!"_ZTSN3HIR14StructMarkingsE", !10, i64 0, !15, i64 4, !59, i64 8, !15, i64 12, !60, i64 16, !15, i64 20, !15, i64 24, !10, i64 28, !10, i64 29, !61, i64 32}
!59 = !{!"_ZTSN3HIR14StructMarkings7DstTypeE", !7, i64 0}
!60 = !{!"_ZTSN3HIR14StructMarkings6CoerceE", !7, i64 0}
!61 = !{!"_ZTS4U128", !57, i64 0, !57, i64 8}
!62 = !{!"_ZTSN3HIR14ConstEvalStateE", !7, i64 0}
!63 = !{!27, !15, i64 204}
!64 = distinct !{!64, !18}
!65 = distinct !{!65, !18}
!66 = !{!67, !6, i64 8}
!67 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !68, i64 24, !73, i64 72, !79, i64 104, !79, i64 112, !79, i64 120, !79, i64 128, !79, i64 136, !79, i64 144, !79, i64 152, !79, i64 160, !79, i64 168, !79, i64 176, !79, i64 184, !79, i64 192, !79, i64 200, !79, i64 208}
!68 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !69, i64 0}
!69 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !70, i64 0}
!70 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !71, i64 0, !54, i64 8}
!71 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !72, i64 0}
!72 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!73 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !74, i64 0, !78, i64 24}
!74 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !75, i64 0}
!75 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !76, i64 0}
!76 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!78 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!79 = !{!"_ZTSN3HIR10SimplePathE", !80, i64 0}
!80 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!81 = !{!82, !10, i64 16}
!82 = !{!"_ZTSN3HIR12TypeParamDefE", !83, i64 0, !84, i64 8, !10, i64 16}
!83 = !{!"_ZTS8RcString", !6, i64 0}
!84 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!85 = !{!67, !6, i64 16}
!86 = distinct !{!86, !18}
!87 = distinct !{!87, !18}
!88 = !{!89, !10, i64 0}
!89 = !{!"_ZTSN3HIR19TypeData_ErasedTypeE", !10, i64 0, !90, i64 8, !94, i64 32, !98, i64 56}
!90 = !{!"_ZTSSt6vectorIN3HIR9TraitPathESaIS1_EE", !91, i64 0}
!91 = !{!"_ZTSSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE", !92, i64 0}
!92 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE12_Vector_implE", !93, i64 0}
!93 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!94 = !{!"_ZTSSt6vectorIN3HIR11LifetimeRefESaIS1_EE", !95, i64 0}
!95 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE", !96, i64 0}
!96 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE12_Vector_implE", !97, i64 0}
!97 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!98 = !{!"_ZTSN3HIR25TypeData_ErasedType_InnerE", !99, i64 0, !7, i64 8}
!99 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner3TagE", !7, i64 0}
!100 = distinct !{!100, !18}
!101 = distinct !{!101, !18}
!102 = distinct !{!102, !18}
!103 = distinct !{!103, !18}
!104 = distinct !{!104, !18}
!105 = distinct !{!105, !18}


; 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.HIR::PathParams" = type { %class.ThinVector.26, %class.ThinVector.27, %class.ThinVector.28 }
%class.ThinVector.26 = type { ptr }
%class.ThinVector.27 = type { ptr }
%class.ThinVector.28 = type { ptr }
%"class.std::function.444" = 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.621 = type { ptr }

@.str.7 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE = external hidden unnamed_addr constant [90 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %2) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i8, align 1
  %5 = alloca %"struct.HIR::PathParams", align 8
  %6 = alloca %"class.std::function.444", align 8
  %7 = alloca %class.anon.621, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #6
  store i8 0, ptr %4, align 1, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %0, i64 128
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #6
  call void @_ZN3HIR10PathParamsC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #6
  store ptr %4, ptr %7, align 8, !tbaa !9
  call void @"_ZNSt8functionIFb7ImplRefN3HIR7CompareEEEC2IZNK15TraitResolution13type_is_sizedERK4SpanRKNS1_7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #6
  %9 = invoke noundef zeroext i1 @_ZNK15TraitResolution16find_trait_implsERK4SpanRKN3HIR10SimplePathERKNS3_10PathParamsERKNS3_7TypeRefESt8functionIFb7ImplRefNS3_7CompareEEEb(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %6, i1 noundef zeroext false)
          to label %10 unwind label %11

10:                                               ; preds = %3
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  br i1 %9, label %.thread135, label %13

11:                                               ; preds = %3
  %12 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  resume { ptr, i32 } %12

13:                                               ; preds = %10
  %14 = load i8, ptr %4, align 1, !tbaa !5, !range !11, !noundef !12
  %15 = trunc nuw i8 %14 to i1
  br i1 %15, label %.thread135, label %.lr.ph222

.lr.ph222:                                        ; preds = %13
  %16 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %17 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  switch i32 %17, label %.thread135 [
    i32 0, label %24
    i32 1, label %25
    i32 3, label %.preheader.split
    i32 9, label %30
    i32 4, label %.preheader138.split.split
    i32 5, label %54
    i32 7, label %77
    i32 6, label %82
  ]

.preheader138.split.split:                        ; preds = %.lr.ph222
  %18 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  %19 = getelementptr inbounds i8, ptr %18, i64 88
  %20 = call noundef i32 @_ZNK3HIR15TypePathBinding3tagEv(ptr noundef nonnull align 8 dereferenceable(16) %19)
  switch i32 %20, label %.thread135 [
    i32 0, label %.split
    i32 1, label %32
    i32 2, label %34
    i32 3, label %.split170
    i32 6, label %37
    i32 5, label %39
    i32 4, label %41
  ]

.preheader.split:                                 ; preds = %.lr.ph222
  %21 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  %22 = load i32, ptr %21, align 4
  %.fr = freeze i32 %22
  %23 = icmp eq i32 %.fr, 16
  br i1 %23, label %._crit_edge, label %.thread135, !llvm.loop !13

24:                                               ; preds = %.lr.ph222
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 3931, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE) #7
  unreachable

25:                                               ; preds = %.lr.ph222
  %26 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  %27 = getelementptr inbounds i8, ptr %26, i64 4
  %28 = load i32, ptr %27, align 4, !tbaa !15
  %29 = add i32 %28, -3
  %switch = icmp ult i32 %29, -2
  %spec.select122 = zext i1 %switch to i32
  br label %.thread135

30:                                               ; preds = %.lr.ph222
  %31 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  br label %.thread135

.split:                                           ; preds = %.preheader138.split.split
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.7, i32 noundef 3984, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE) #7
  unreachable

32:                                               ; preds = %.preheader138.split.split
  %33 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding10as_UnboundEv(ptr noundef nonnull align 8 dereferenceable(16) %19)
  br label %.thread135

34:                                               ; preds = %.preheader138.split.split
  %35 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3HIR15TypePathBinding9as_OpaqueEv(ptr noundef nonnull align 8 dereferenceable(16) %19)
  br label %.thread135

.split170:                                        ; preds = %.preheader138.split.split
  %36 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding13as_ExternTypeEv(ptr noundef nonnull align 8 dereferenceable(16) %19)
  br label %._crit_edge

37:                                               ; preds = %.preheader138.split.split
  %38 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %19)
  br label %.thread135

39:                                               ; preds = %.preheader138.split.split
  %40 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding8as_UnionEv(ptr noundef nonnull align 8 dereferenceable(16) %19)
  br label %.thread135

41:                                               ; preds = %.preheader138.split.split
  %42 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %19)
  %43 = load ptr, ptr %42, align 8, !tbaa !9
  %44 = getelementptr inbounds i8, ptr %43, i64 208
  %45 = load i32, ptr %44, align 8, !tbaa !19
  switch i32 %45, label %.thread135 [
    i32 3, label %._crit_edge
    i32 1, label %.split174
    i32 2, label %._crit_edge
  ]

.split174:                                        ; preds = %41
  %46 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %18)
  %47 = getelementptr inbounds i8, ptr %46, i64 16
  %48 = load ptr, ptr %42, align 8, !tbaa !9
  %49 = getelementptr inbounds i8, ptr %48, i64 204
  %50 = load i32, ptr %49, align 4, !tbaa !56
  %51 = zext i32 %50 to i64
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %47, i64 noundef %51)
  %53 = call noundef i32 @_ZNK15TraitResolution13type_is_sizedERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(280) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %52)
  br label %._crit_edge

54:                                               ; preds = %.lr.ph222
  %55 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3HIR8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  %56 = call noundef i32 @_ZNK3HIR10GenericRef5groupEv(ptr noundef nonnull align 8 dereferenceable(12) %55)
  switch i32 %56, label %.thread135 [
    i32 0, label %57
    i32 1, label %67
  ]

57:                                               ; preds = %54
  %58 = getelementptr inbounds i8, ptr %0, i64 8
  %59 = load ptr, ptr %58, align 8, !tbaa !57
  %60 = call noundef i32 @_ZNK3HIR10GenericRef3idxEv(ptr noundef nonnull align 8 dereferenceable(12) %55)
  %61 = zext i32 %60 to i64
  %62 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNKSt6vectorIN3HIR12TypeParamDefESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %59, i64 noundef %61)
  %63 = getelementptr inbounds i8, ptr %62, i64 16
  %64 = load i8, ptr %63, align 8, !tbaa !72, !range !11, !noundef !12
  %65 = trunc nuw i8 %64 to i1
  %66 = select i1 %65, i32 0, i32 2
  br label %.thread135

67:                                               ; preds = %54
  %68 = getelementptr inbounds i8, ptr %0, i64 16
  %69 = load ptr, ptr %68, align 8, !tbaa !76
  %70 = call noundef i32 @_ZNK3HIR10GenericRef3idxEv(ptr noundef nonnull align 8 dereferenceable(12) %55)
  %71 = zext i32 %70 to i64
  %72 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNKSt6vectorIN3HIR12TypeParamDefESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %69, i64 noundef %71)
  %73 = getelementptr inbounds i8, ptr %72, i64 16
  %74 = load i8, ptr %73, align 8, !tbaa !72, !range !11, !noundef !12
  %75 = trunc nuw i8 %74 to i1
  %76 = select i1 %75, i32 0, i32 2
  br label %.thread135

77:                                               ; preds = %.lr.ph222
  %78 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3HIR8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  %79 = load i8, ptr %78, align 8, !tbaa !77, !range !11, !noundef !12
  %80 = trunc nuw i8 %79 to i1
  %81 = select i1 %80, i32 0, i32 2
  br label %.thread135

82:                                               ; preds = %.lr.ph222
  %83 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZNK3HIR8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(184) %16)
  br label %.thread135

._crit_edge:                                      ; preds = %41, %41, %.split174, %.split170, %.preheader.split
  %.27 = phi i32 [ 2, %.preheader.split ], [ %53, %.split174 ], [ 2, %.split170 ], [ 2, %41 ], [ 2, %41 ]
  br label %.thread135, !llvm.loop !89

.thread135:                                       ; preds = %.preheader.split, %._crit_edge, %.lr.ph222, %41, %.preheader138.split.split, %32, %34, %37, %39, %25, %54, %67, %57, %82, %77, %30, %13, %10
  %.29 = phi i32 [ 0, %10 ], [ 1, %13 ], [ %spec.select122, %25 ], [ 0, %54 ], [ %66, %57 ], [ %76, %67 ], [ 2, %30 ], [ %81, %77 ], [ 2, %82 ], [ %.27, %._crit_edge ], [ 0, %.lr.ph222 ], [ 0, %41 ], [ 0, %.preheader138.split.split ], [ 0, %32 ], [ 0, %34 ], [ 0, %37 ], [ 0, %39 ], [ 0, %.preheader.split ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  ret i32 %.29
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!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 = !{!"bool", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !18, i64 4}
!16 = !{!"_ZTSN3HIR8TypeData10Data_InferE", !17, i64 0, !18, i64 4}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSN3HIR10InferClassE", !7, i64 0}
!19 = !{!20, !52, i64 208}
!20 = !{!"_ZTSN3HIR6StructE", !21, i64 0, !38, i64 96, !39, i64 104, !17, i64 136, !17, i64 140, !41, i64 144, !51, i64 200, !55, i64 248}
!21 = !{!"_ZTSN3HIR13GenericParamsE", !22, i64 0, !26, i64 24, !30, i64 48, !34, i64 72}
!22 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!26 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!30 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !31, i64 0}
!31 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!34 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !35, i64 0}
!35 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!38 = !{!"_ZTSN3HIR6Struct4ReprE", !7, i64 0}
!39 = !{!"_ZTSN3HIR6Struct4DataE", !40, i64 0, !7, i64 8}
!40 = !{!"_ZTSN3HIR6Struct4Data3TagE", !7, i64 0}
!41 = !{!"_ZTSN3HIR13TraitMarkingsE", !6, i64 0, !6, i64 1, !6, i64 2, !42, i64 8}
!42 = !{!"_ZTSSt3mapIN3HIR10SimplePathENS0_13TraitMarkings11AutoMarkingESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !43, i64 0}
!43 = !{!"_ZTSSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !44, i64 0}
!44 = !{!"_ZTSNSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !45, i64 0, !47, i64 8}
!45 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR10SimplePathEEE", !46, i64 0}
!46 = !{!"_ZTSSt4lessIN3HIR10SimplePathEE"}
!47 = !{!"_ZTSSt15_Rb_tree_header", !48, i64 0, !50, i64 32}
!48 = !{!"_ZTSSt18_Rb_tree_node_base", !49, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!49 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!50 = !{!"long", !7, i64 0}
!51 = !{!"_ZTSN3HIR14StructMarkingsE", !6, i64 0, !17, i64 4, !52, i64 8, !17, i64 12, !53, i64 16, !17, i64 20, !17, i64 24, !6, i64 28, !6, i64 29, !54, i64 32}
!52 = !{!"_ZTSN3HIR14StructMarkings7DstTypeE", !7, i64 0}
!53 = !{!"_ZTSN3HIR14StructMarkings6CoerceE", !7, i64 0}
!54 = !{!"_ZTS4U128", !50, i64 0, !50, i64 8}
!55 = !{!"_ZTSN3HIR14ConstEvalStateE", !7, i64 0}
!56 = !{!20, !17, i64 204}
!57 = !{!58, !10, i64 8}
!58 = !{!"_ZTS18TraitResolveCommon", !10, i64 0, !10, i64 8, !10, i64 16, !59, i64 24, !64, i64 72, !70, i64 104, !70, i64 112, !70, i64 120, !70, i64 128, !70, i64 136, !70, i64 144, !70, i64 152, !70, i64 160, !70, i64 168, !70, i64 176, !70, i64 184, !70, i64 192, !70, i64 200, !70, i64 208}
!59 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !60, i64 0}
!60 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !61, i64 0}
!61 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !62, i64 0, !47, i64 8}
!62 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !63, i64 0}
!63 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!64 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !65, i64 0, !69, i64 24}
!65 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !66, i64 0}
!66 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !67, i64 0}
!67 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!69 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!70 = !{!"_ZTSN3HIR10SimplePathE", !71, i64 0}
!71 = !{!"_ZTS10ThinVectorI8RcStringE", !10, i64 0}
!72 = !{!73, !6, i64 16}
!73 = !{!"_ZTSN3HIR12TypeParamDefE", !74, i64 0, !75, i64 8, !6, i64 16}
!74 = !{!"_ZTS8RcString", !10, i64 0}
!75 = !{!"_ZTSN3HIR7TypeRefE", !10, i64 0}
!76 = !{!58, !10, i64 16}
!77 = !{!78, !6, i64 0}
!78 = !{!"_ZTSN3HIR19TypeData_ErasedTypeE", !6, i64 0, !79, i64 8, !83, i64 32, !87, i64 56}
!79 = !{!"_ZTSSt6vectorIN3HIR9TraitPathESaIS1_EE", !80, i64 0}
!80 = !{!"_ZTSSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE", !81, i64 0}
!81 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE12_Vector_implE", !82, i64 0}
!82 = !{!"_ZTSNSt12_Vector_baseIN3HIR9TraitPathESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!83 = !{!"_ZTSSt6vectorIN3HIR11LifetimeRefESaIS1_EE", !84, i64 0}
!84 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE", !85, i64 0}
!85 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE12_Vector_implE", !86, i64 0}
!86 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeRefESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!87 = !{!"_ZTSN3HIR25TypeData_ErasedType_InnerE", !88, i64 0, !7, i64 8}
!88 = !{!"_ZTSN3HIR25TypeData_ErasedType_Inner3TagE", !7, i64 0}
!89 = distinct !{!89, !14}


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